经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MS SQL Server » 查看文章
SQL语句NOT IN优化之换用NOT EXISTS
来源:cnblogs  作者:呼哈嘿  时间:2018/10/8 9:03:04  对本文有异议

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

  1. SET STATISTICS PROFILE ON;
  2. SET STATISTICS IO ON;
  3. SET STATISTICS TIME ON;
  4. GO
  5. /*--你的SQL脚本开始*/
  6. SELECT A.Id
  7. FROM dbo.Questions A WITH ( NOLOCK )
  8. WHERE A.QuestionState = '正常'
  9. AND A.CheckTime > '2018-09-29 16:00:00'
  10. AND A.StateShowID NOT IN ( SELECT B.IntId
  11. FROM dbo.PostedData B
  12. WHERE B.[Type] = 'question' );
  13. /*你的SQL脚本结束*/
  14. GO
  15. SET STATISTICS PROFILE OFF;
  16. SET STATISTICS IO OFF;
  17. SET STATISTICS TIME OFF;

查询耗时如图:

换用NOT EXISTS 查询示例:

  1. SET STATISTICS PROFILE ON;
  2. SET STATISTICS IO ON;
  3. SET STATISTICS TIME ON;
  4. GO
  5. /*--你的SQL脚本开始*/
  6. SELECT A.Id
  7. FROM dbo.Questions A WITH ( NOLOCK )
  8. WHERE A.QuestionState = '正常'
  9. AND A.CheckTime > '2018-09-29 16:00:00'
  10. AND NOT EXISTS ( SELECT B.IntId
  11. FROM dbo.PostedData B
  12. WHERE B.[Type] = 'question'
  13. AND A.StateShowID = B.IntId );
  14. /*你的SQL脚本结束*/
  15. GO
  16. SET STATISTICS PROFILE OFF;
  17. SET STATISTICS IO OFF;
  18. SET STATISTICS TIME OFF;

 查询耗时如图:

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号