您现在的位置是:首页 > 文章详情

SQL语句NOT IN优化之换用NOT EXISTS

日期:2018-10-15点击:487
原文: SQL语句NOT IN优化之换用NOT EXISTS

NOT IN查询示例(示例背景描述:根据条件查询Questions表得到的数据基本在PostedData表中不存在,为完全保证查询结果在PostedData表中不存在,使用NOT IN):

SET STATISTICS PROFILE ON; 
SET STATISTICS IO ON; 
SET STATISTICS TIME ON; 
GO
/*--你的SQL脚本开始*/
SELECT  A.Id
FROM    dbo.Questions A WITH ( NOLOCK )
WHERE   A.QuestionState = '正常'
        AND A.CheckTime > '2018-09-29 16:00:00'
        AND A.StateShowID NOT IN ( SELECT   B.IntId
                                   FROM     dbo.PostedData B
                                   WHERE    B.[Type] = 'question' );

/*你的SQL脚本结束*/
GO 
SET STATISTICS PROFILE OFF;
SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;

查询耗时如图:

换用NOT EXISTS 查询示例:

SET STATISTICS PROFILE ON; 
SET STATISTICS IO ON; 
SET STATISTICS TIME ON; 
GO
/*--你的SQL脚本开始*/
SELECT  A.Id
FROM    dbo.Questions A WITH ( NOLOCK )
WHERE   A.QuestionState = '正常'
        AND A.CheckTime > '2018-09-29 16:00:00'
        AND NOT EXISTS ( SELECT B.IntId
                         FROM   dbo.PostedData B
                         WHERE  B.[Type] = 'question'
                                AND A.StateShowID = B.IntId );

/*你的SQL脚本结束*/
GO 
SET STATISTICS PROFILE OFF;
SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;

 查询耗时如图:

根据查询耗时明显可以看出,使用 NOT EXISTS 比NOT IN 的查询速度快很多。

But,我做了其他条件下的一些实验,发现根据条件查询A表得到的结果,在B表中存在时,两种查询的查询速度差异不大。还有一些情况NOT EXISTS的查询速度比NOT IN慢。

原文链接:https://yq.aliyun.com/articles/677056
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章