MySQL中in和or的效率哪个高,为什么?
导读:最近遇到一个网站卡死的问题,从脚本中发现有个sql执行效率很慢,后来将or改为in,效率提升了几百倍。那么MySQL中in为何比or的效率高呢?原因是什么?接下来我们一起来探讨一下。 场景描述 1.两个表关联查询 2.tab...
最近遇到一个网站卡死的问题,从脚本中发现有个sql执行效率很慢,后来将or改为in,效率提升了几百倍。那么MySQL中in为何比or的效率高呢?原因是什么?接下来我们一起来探讨一下。
场景描述
1.两个表关联查询
2.table1 的数据量接近100万
3.table2 的数据量接近900万
4.查询条件中的title字段没有加索引
5.原始查询语句
SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title="衣服" or b.title="裤子" or b.title="帽子" limit 0,100
6.改造后的查询语句
SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title IN ("衣服","裤子","帽子") limit 0,100
改造后的效率
原sql的执行时间为5s,更改之后只需要0.01s
原因
查了一下资料,在数据量过百万,并且条件没有加索引,or的查询效率远远低于in,or的效率为O(n),而in的效率为O(logn), 当n越大的时候效率相差越明显。
现在大家对于MySQL中in为何比or的效率高应该都清楚了吧,上述示例有一定的参考价值,感兴趣的朋友可以了解看看,希望对大家学习MySQL数据库的使用有帮助,想要了解更多可以继续浏览网络其他相关的文章。
文本转载自PHP中文网
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MySQL中in和or的效率哪个高,为什么?
本文地址: https://pptw.com/jishu/650911.html