总共两张表goods表200多万数据,usrinfo表数据量1600多万数据:id分别建有主键、index索引,表引擎InnoDB,测试环境Linux、mysql5.6、apache:
请看以下两个语句:
1.select * from usrinfo where id in (select id from goods) limit 1400000,3;
2. select * from usrinfo where id in (select id from goods where id=1 or id=3 or id=5) limit 1400000,3;
语句只是用来测试,我们知道外层这种查询是要对usrinfo一千多万数据进行全部扫描的,时间会很慢,可以选择连接查询进行优化,所以第二条语句查询速度很慢,但是为什么第一条语句会很快?以下是截图:

第一条语句profile分析执行过程:

第二条语句profile分析执行过程:

explain解析第一条语句截图:

explain解析第二条语句截图:

两条语句同样进行了全表扫描,我想知道为什么第一条语句会很快,通过分析我们可以看出内部查询基本差不多,第二条语句的preparing时间很长是什么原因造成的?难道是子查询中没有指定id,外层查询会随机查询三条数据吗?
最佳答案