博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql中IN和EXITS效率
阅读量:6079 次
发布时间:2019-06-20

本文共 793 字,大约阅读时间需要 2 分钟。

mysql中的in语句是把外表和内表作hash 连接。而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都觉得exists比in语句的效率要高。这样的说法事实上是不准确的。这个是要区分环境的。

 

假设查询的两个表大小相当,那么用in和exists区别不大。 
假设两个表中一个较小。一个是大表。则子查询表大的用exists,子查询表小的用in: 
比如:表A(小表)。表B(大表)
 
1:
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列的索引。 
相反的
 
2:
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列的索引。
 
 
not in 和not exists假设查询语句使用了not in 那么内外表都进行全表扫描,没实用到索引;而not extsts 的子查询依旧能用到表上的索引。

所以不管那个表大,用not exists都比not in要快

 

in 与 =的差别 
select name from student where name in ('zhang','wang','li','zhao'); 
与 
select name from student where name='zhang' or name='li' or name='wang' or name='zhao' 
的结果是同样的。

转载地址:http://nkhgx.baihongyu.com/

你可能感兴趣的文章
萌新的node教程
查看>>
【活动】掘金技术征文丨给大家看的 Julia 教程
查看>>
推荐Android两种屏幕适配方案
查看>>
HTML5前端面试常见问题汇总
查看>>
HTTP2 基础入门
查看>>
让数据传输更安全
查看>>
实现一个requirejs原型demo
查看>>
画一个三角形
查看>>
node ( 5 ) -----process详解(这个标题不讨喜……)
查看>>
浅谈unicode编码和utf-8编码的关系
查看>>
云栖专辑|阿里开发者们的第二个感悟:PG大V德哥的使命感与开放心态
查看>>
分布式定时任务中间件架构及其实现(附GitHub开源地址)
查看>>
理解Angular的providers - 给Http添加默认headers
查看>>
Ionic2入门教程 实现TodoList App-1 初识Ionic2
查看>>
Windows下搭建Git服务器(使用Gitblit)
查看>>
最新版本支付宝与微信支付集成与使用
查看>>
Python 用Django创建自己的博客(1)
查看>>
Activity的启动过程第三篇
查看>>
不能错过的web前端性能优化总结
查看>>
iOS开发中MQTTKit的TLS SSL支持方案
查看>>