in 和or区别:

如果in和or所在列有索引或者主键的话,or和in没啥差别,执行计划和执行时间都几乎一样。

如果in和or所在列没有 索引的话,性能差别就很大了。在没有索引的情况下,随着in或者or后面的数据量越多,in的效率不会有太大的下降,但是or会随着记录越多的话性能下降 非常厉害

因此在给in和or的效率下定义的时候,应该再加上一个条件,就是所在的列是否有索引或者是否是主键。如果有索引或者主键性能没啥差别,如果没有索引,性能差别不是一点点!

具体可参考:http://blog.chinaunix.net/uid-20639775-id-3416737.html

in和exists

in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;

例如:表A(小表),表B(大表)

select * from A where cc in(select cc from B)  -->效率低,用到了A表上cc列的索引;

select * from A where exists(select cc from B where cc=A.cc)  -->效率高,用到了B表上cc列的索引。

相反的:

select * from B where cc in(select cc from A)  -->效率高,用到了B表上cc列的索引

select * from B where exists(select cc from A where cc=B.cc)  -->效率低,用到了A表上cc列的索引。
1.性能的考虑此时就按子表大主表小用exist,子表小主表大用in的原则就可以.
2.写法的不同, exist的where条件是: "...... where exist (..... where a.id=b.id)"
--in的where条件是: " ...... where id in ( select id .... where a.id=b.id)"
 
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快

最新文章

  1. 为什么ReactiveCocoa中推荐使用RACSignal来做信号处理而不是RACSubject
  2. 4-printf & scanf函数
  3. 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
  4. HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)
  5. BizTalk调用WS-Security的web services
  6. wamp下开启SSL,解决APACHE启动问题
  7. Oracle 存储过程(2)
  8. 中国IC业“芯”结:IC小国真能赶追韩美日么?
  9. Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法
  10. SQL Server 板机
  11. (函数封装)domReady
  12. 更新版PowerBI发布了-- Power BI Report Server Update – March 2018
  13. SLogViewer下载及使用说明
  14. ichartjs用法
  15. 学习用Node.js和Elasticsearch构建搜索引擎(4): 构建Elasticsearch搜索引擎
  16. 10款 Mac 系统优化清理工具软件推荐和下载
  17. asp.net core 自定义404等友好错误页面
  18. Centos7下gogs数据配置迁移
  19. 代码basic讲解
  20. 信号滤波模块verilog代码---UNLOCK,LOCK状态机方式

热门文章

  1. word-break和word-wrap的使用和区别
  2. FTPClient工具类
  3. android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】
  4. RFID系统 免费开源代码 开发,分享[申明:来源于网络]
  5. 20175320 2018-2019-2 《Java程序设计》第5周学习总结
  6. (二)juc线程高级特性——CountDownLatch / Callable / Lock
  7. ionic3 创建项目至apk打包全过程教程
  8. [bash][awk] bash下使用awk方便的列求和
  9. git操作常见错误处理
  10. java框架之SpringMVC(1)-入门&整合MyBatis