mysql中or和in的效率
前言
今天遇到了一个网站卡死的问题,过了几分钟就好了,找到了一个定时脚本中有个sql,执行效率很慢,DBA建议将or改为in,效率提升了几百倍
场景描述
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越大的时候效率相差越明显。
相关推荐
csdnYF 2020-11-15
guying 2020-10-05
mysteryrat 2020-09-21
千锋 2020-08-10
89550191 2020-08-09
sssdhua 2020-08-06
qidu 2020-06-08
80580391 2020-05-29
81520190 2020-05-28
付春杰Blog 2020-05-14
aaLiweipeng 2020-04-27
liuyang000 2020-04-22
yezitoo 2020-04-20
qyf 2020-04-19
Dreamhome 2020-04-16
nicepainkiller 2020-03-23
huanglianhuabj00 2020-03-23
小焊猪web前端 2020-03-12