mysql中in的效率

来源:互联网 发布:python web监控系统 编辑:程序博客网 时间:2024/05/29 13:39

select * from user where user.id in (1,2,3,4,5,6,7,8)

mysql对这种语句的执行效率是很高的,他的执行分几步来实现。

第一步:

将in中的数据排序,

第二步:

将user表中的行中的id用二分法在排序后的序列中查找,这样的查找速度非常高


再来看第二种情况

select * from user where user.id in (select id from user where user.id>0 and user.id <10);

这种情况下,mysql会优化的很差,在高性能MYSQL的180页有非常详细的说明,就是mysql优化这种查询的时候试图将外面的查询和里面的查询产生某种关联。

会优化成

select * from user u1 where exists(select id from user u2 where u2.id>0 and u2.id<10 and u1.id=u2.id );

这样当然会非常慢

解决办法是自己写连接查询

select * from user u1 inner join user u2 using(id) where u1.id>0 and u1.id<10;

0 0
原创粉丝点击