在mysql limit分页中使用延迟关联和覆盖索引
MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少IO,提供效率。
t_wx_bus_member 中有500万条数据,其中id为主键
执行select * from t_wx_bus_member order by id desc limit 4000000 ,10 花费了11s左右的时间
再次执行EXPLAIN select * from t_wx_bus_member order by id desc limit 4000000 ,10
发现Extra为null,说明没有用到覆盖索引
于是优化下sql:
select * from t_wx_bus_member m
inner join (select id from t_wx_bus_member order by id desc limit 4000000 ,10)b on m.id = b.id
发现执行时间变成2s左右了
继续分析:EXPLAIN select * from t_wx_bus_member m
inner join (select id from t_wx_bus_member order by id desc limit 4000000 ,10)b on m.id = b.id
说明select id from t_wx_bus_member order by id desc limit 4000000 ,10使用到了覆盖索引,效率提高了
另外一种分页优化方式,先查询到偏移量的位置,再取前10条
同样分析下执行计划
记第一次写博客