mysql not exists 效率高_mysql 中 in/exists/not in/not exists/or的使用场景跟效率对比_mysql...

mysql 中 in/exists/not in/not exists/or的使用场景和效率对比

mysql 中 in/exists/not in/not exists/or的使用场景和效率对比

网上一堆博客在讨论mysql里面内置的关键字的效率问题,绝大部分都脱离了一定的前提条件就展开了论述,这是不科学的。

首先我们必须确定在mysql的哪个版本当中来讨论。这一点是因为mysql是在不断的快速更新当中的,大家都知道5.6的版本和之前的版本之间质的飞跃可以说是

里程碑式的。当然硬件环境也要保持一致。存储引擎也必须一致。该使用索引的地方使用索引,联合索引用的适当效率会很高,覆盖索引。

以下都是以InnoDB作为存储引擎做比较的。

讨论in VS or

在当前版本中(5.6.x),

1 数据量较小的情况下,效率相差无几。

2 数据量较大的时候,in 效率平稳降低,or 急剧降低。

讨论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

注意mysql的版本,可能等下一个大版本更新的时候,一切都可能会改变。

分页的时候 尽量如此优化

select * from page where id between 1000000 and 1000010;

欢迎大家阅读《mysql 中 in/exists/not in/not exists/or的使用场景跟效率对比_mysql》,跪求各位点评,by 搞代码

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值