使用SQL Server2008 R2时,以下select命令在使用IN时只需3秒,在使用NOT in时只需20分钟。对于IN和NOT IN,在SQL Server 2012上执行相同的select操作需要3秒钟。以前有没有人遇到过这种情况?如果是的话,有没有不同的查询可以减少这种延迟?
背景: MessageIndentifier记录总数约为9000条。IN返回~1400,NOT IN返回~7600。我使用的是SQL Server2008 R2。
SELECT
AA.[MessageIdentifier]
FROM
(SELECT
CAST(AD.[Contract Number] AS VARCHAR) + '.' +
CAST(AD.[Installation ID] AS VARCHAR) + '.'+
CAST(AD.[System ID] AS VARCHAR) AS MessageIdentifier
FROM
CDCS_FAMS.dbo.SiteParamBaseTable AD) AS AA
WHERE
AA.[MessageIdentifier] IN (SELECT DISTINCT AB.[MessageIdentifier]
FROM
(SELECT cast(AC.[Contract Number] as varchar) + '.' + cast(AC.[Installation ID] as varchar) + '.'+ cast(AC.[System ID] as varchar) AS MessageIdentifier
FROM CDCS_FAMS.dbo.SiteParamBaseTable AC) AS AB,
CDCS_FAMS.dbo.EventTable as DA
WHERE
(DA.[Message] LIKE '%ISO MODE:%'
OR DA.[Message] LIKE '%TEST MODE:%')
AND DA.[Message] LIKE '%Alarm%'
AND DA.[Event time] > DATEADD(DAY,-10, GETDATE())
AND DA.[Message] LIKE '%' + AB.[MessageIdentifier] + '%')您的帮助将不胜感激。
发布于 2017-03-23 13:32:29
你可以通过sp_configure增加你的执行时间。
有关更多信息,请访问Read this
发布于 2017-03-23 13:48:12
选择cast(AC.Contract Number as varchar) +‘.+ cast(AC.Installation ID as varchar) +’.+ cast(AC.System ID AS varchar) as MessageIdentifier FROM CDCS_FAMS.dbo.SiteParamBaseTable AC
is excess
exists或not exists,在我的示例中使用exists,但您可以将其更改为not exists,这将比您的查询更快,请尝试代码:
SELECT AA.[MessageIdentifier]
FROM
(SELECT
cast(AD.[Contract Number] as varchar) + '.' + cast(AD.[Installation ID] as varchar) + '.'+ cast(AD.[System ID] as varchar) AS MessageIdentifier
FROM
CDCS_FAMS.dbo.SiteParamBaseTable AD) AS AA
WHERE
EXISTS (SELECT 1
FROM CDCS_FAMS.dbo.EventTable as DA
WHERE (DA.[Message] like '%ISO MODE:%' or DA.[Message] like '%TEST MODE:%')
AND DA.[Message] like '%Alarm%'
AND DA.[Event time] > DATEADD(DAY,-10,GETDATE())
AND DA.[Message] like '%'+AA.[MessageIdentifier]+'%')发布于 2017-03-24 12:14:26
感谢你的回复,非常感谢。已经排序好了。在not in条件下,我没有正确地计算NULL。在SQL2012中使用NOT IN是可以的,但在SQL2008R2中就不一样了。为了解决这个问题,我做了一个左连接...在..。哪里..。为空。这就起到了作用。
再次感谢您的回复。
BMV
https://stackoverflow.com/questions/42966244
复制相似问题