使用WHERE删除 - 日期,时间和字符串比较 - 非常慢

Tom*_*ton 4 sql t-sql sql-server performance sql-server-2008

我有一个执行速度慢的查询,并希望有更多sql知识的人可以帮助我提高性能:

我有2个表一个Source和一个Common,我加载一些数据,其中包含Date,Time和String(whch是服务器名称),加上一些..

Source表可以包含40k +行(它有30个奇数列,包含整数,日期,时间和一些varchars(255)/(Max)

我使用以下查询从源中的Common中删除任何数据:

'Delete from Common where convert(varchar(max),Date,102)+convert(varchar(max),Time,108)+[ServerName] in (Select convert(varchar(max),[date],102)+convert(varchar(max),time,108)+ServerName from Source where sc_status < 300)'

源字段采用以下格式:

  • ServerName varchar(255)IE SN1234
  • Date varchar(255)IE 2012-05-22
  • 时间变量(255)IE 08:12:21

Common Fields采用以下格式:

  • ServerName varchar(255)IE SN1234
  • 日期日期IE 2011-08-10
  • 时间(7)IE 14:25:34.0000000

谢谢

Aar*_*and 5

将两边转换为字符串,然后将它们连接成一个大字符串,然后比较这些结果效率不高.只进行必要的转换.试试这个例子,看看它是如何比较的:

DELETE c
  FROM dbo.Common AS c
  INNER JOIN dbo.Source AS s
  ON s.ServerName = c.ServerName
  AND CONVERT(DATE, s.[Date]) = c.[Date]
  AND CONVERT(TIME(7), s.[Time]) = c.[Time]
  WHERE s.sc_status < 300;
Run Code Online (Sandbox Code Playgroud)