mysql大量数据分页查询优化-延迟关联
温馨提示:
本文最后更新于 2018年02月22日,已超过 2,529 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
所有的php初学者都应该知道,mysql的分页语句写法如下:
select * from a limit (page-1)*page_size,page_size
而当这语句分页到一定程度时,例如1000页,每页20条
select * from a limit 19980,20
会发现分页之后查询的会越来越慢
原因是因为limit a,b 的取数据方式是,先取出a+b条数据,再把a条筛选掉,剩b条,相当于一次性要取a+b条的数据,而a条其实是无用的
解决方案如下
一:php代码解决
例如我们先查询出第一页的数据:
select * from a limit 20
保留最后一个的id,当需要取第2页数据时,则
select * from a where id>最后一个的id limit 20
这样数据库就会每次都能走索引,然后只查出20条
缺点:不能从第一页跳转到第n页
缺点解决方案:前100页,不做优化,当到101页时采用该优化方案,并且不让用户从101页进行页面跳转到1xx页
二:mysql解决
SELECT *
FROM a
inner join(
select id
from a
LIMIT 19980, 20
) as lim using(id);
使用该方法,会先从索引表取出索引id,然后进行using索引覆盖方法,因为先查询的是索引,然后才从索引里关联取出20条记录,大大的提升了查询速度
实例图:
普通方法查询,0.123秒
上一页最后一个的id为20000,则
php方法查询,0.070秒
mysql索引覆盖查询,0.089秒
正文到此结束
- 本文标签: 数据库
- 本文链接: https://www.php20.cn/article/112
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权