mysql中in的效率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/whodarewin2005/article/details/20134537

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;

展开阅读全文

没有更多推荐了,返回首页