首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询选择,执行超时

SQL查询选择,执行超时
EN

Stack Overflow用户
提问于 2017-03-23 10:37:27
回答 3查看 373关注 0票数 0

使用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。

代码语言:javascript
复制
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] + '%')

您的帮助将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2017-03-23 13:32:29

你可以通过sp_configure增加你的执行时间。

有关更多信息,请访问Read this

票数 0
EN

Stack Overflow用户

发布于 2017-03-23 13:48:12

  1. 您的第二个查询

选择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

  • 在main中使用existsnot exists,在我的示例中使用exists,但您可以将其更改为not exists,这将比您的查询更快,请尝试

代码:

代码语言:javascript
复制
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]+'%')
票数 0
EN

Stack Overflow用户

发布于 2017-03-24 12:14:26

感谢你的回复,非常感谢。已经排序好了。在not in条件下,我没有正确地计算NULL。在SQL2012中使用NOT IN是可以的,但在SQL2008R2中就不一样了。为了解决这个问题,我做了一个左连接...在..。哪里..。为空。这就起到了作用。

再次感谢您的回复。

BMV

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42966244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档