limit优化
- limit作用,限制返回结果的行数
limit 10; ## 取结果集的前10条记录
limit m,n;## 将结果集的前m个丢弃,取之后的n条记录
- 查询3条数据,使用全表扫描,先扫描80行然后丢弃,再取3行
- 如果丢弃之前的很多数据,显然效率很低,有没有更快的方法呢
- 优化:
- 这里用了主键索引,优化;注意子查询写的这么复杂在于主键不一定连续,需要定位第m条记录的主键.
- 在下面这个大表会看的更加清楚!!
- 问 select * from all_info limit 2000000,2;如何优化?
- 这条语句会扫描前2000000条记录然后丢弃,再取后面2条记录
select *from all_info use index(primary) where
id>=(select id from all_info use index(primary) limit 2000000,1)
limit 2;
这里用了主键先定位到第2000000条记录,然后在取后面的2条记录
-
-
执行计划如下
-
第一个全表扫描
-
第二个使用了主键(不显示的写出来也可以,但是我这里有二级索引,不显示写,Mysql会用二级索引,效率更高,但取到的数据并不是按主键排序的第2000000条记录)
-