mysql 中 in/exists/not in/not exists/or的使用场景和效率对比
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
网上一堆博客在讨论mysql里面内置的关键字的效率问题,绝大部分都脱离了一定的前提条件就展开了论述,这是不科学的。
首先我们必须确定在mysql的哪个版本当中来讨论。这一点是因为mysql是在不断的快速更新当中的,大家都知道5.6的版本和之前的版本之间质的飞跃可以说是
里程碑式的。当然硬件环境也要保持一致。存储引擎也必须一致。该使用索引的地方使用索引,联合索引用的适当效率会很高,覆盖索引。
以下都是以InnoDB作为存储引擎做比较的。
讨论in VS or
在当前版本中(5.6.x),
1 数据量较小的情况下,效率相差无几。
2 数据量较大的时候,in 效率平稳降低,or 急剧降低。
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
讨论in VS exists
in 与exists的本质: in 是两张变的hash连接,exists是外层变loop循环,每次循环操作内层表。
在当前版本中(5.6.x),
1 当数据量较小的时候,使用任何一种效率都不受影响。
2 当数据量较大的时候 分为两种情况
1) 子查询的结果集较小,这时候使用in的效率比较好
2) 子查询的结果集较大,这时候使用exists效率好。
3)能用between的地方就不要用in
讨论not in VS not exists
在当前版本中(5.6.x),
not exists 的效率始终比not in 要好。
可以用distinct就不要用group by
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
注意mysql的版本,可能等下一个大版本更新的时候,一切都可能会改变。
分页的时候 尽量如此优化
select * from page where id between 1000000 and 1000010;
相关推荐
关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in ,not in效率的说明。关于Exists,not Exists.in...
mysql多表查询和EXISTS查询性能对比
NOT IN、JOIN、IS NULL、NOT EXISTS效率对比 语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B on A.a = B.a where B.a is null 语句三:select ...
MySQL优化之in,exists,not in,not exists的区别in与existsin查询过程结论:exists查询过程:结论:not in与not existsnot in查询过程:结论:not exists查询过程:结论: 首先我们使用两个用户表作为实例 insert ...
里面自己根据网上的资源整理出来的一份sql中in,exists,not in,not exists的使用方法以及注意事项等,有助于初学的朋友们借鉴。
“exists”和“in”是Oracle中,都是查询某集合的值是否存在在另一个集合,但对不同的数据有不同的用法,主要是在效率问题上存在很大的差别,以下有两个简单例子,以说明 “exists”和“in”的效率问题。
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!
exists 和 not exists的详细解释
golang 错误提示 $GOPATH/go.mod exists but should not goland 出现该问题 去掉vendor即可 初出茅庐有错必改 欢迎交流
in和exists的区别与执行效率问题解析
oracle中exists_和in的效率问题详解
启动MySQL出错,查看了下状态,发现提示MySQL is not running,but lock exists: 一个网友说可能和log文件有关,于是将log文件给移除了,再重启MySQL终于OK了找了下资料,基本上都是说: 代码如下: # chown -R mysql...
主要介绍了MySQL中in与exists的使用及区别介绍,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
“exists”和“in”的效率问题,不同的语句exists和in效率有所不同
exists: 括号内子查询sql语句返回结果不为空(即:sql返回的结果为真),子查询的结果不为空这条件成立,执行...提醒:文章中提供了exists和not exists的常用示例,已经经过本人测试,文档中附有测试数据sql和用法sql。
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
mysql exists与not exists实例详解 tableA |column1 | column1 |column3 | tableb |column1 | column1 |column3 | 要查询 tableA 的数据,条件是是 tableA.column1 不在 tableB 的 tableB.column2 中 也就是要得到...
NULL 博文链接:https://576017120.iteye.com/blog/1624774
基本数据插入 except和intersect和exists和not exists和union和union all sql server
系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not