mysql大量数据分页查询优化-延迟关联

所有的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秒


仙士可博客
请先登录后发表评论
  • 最新评论
  • 总共6条评论
仙士可博客

&nbsp:没鸟用

2018-09-10 17:12:03 回复

仙士可博客
  • 仙士可 回复 &nbsp:等下我就打你一顿
  • 2018-09-11 09:29:58 回复
仙士可博客

诗与远方:啊啊啊

2018-08-31 17:41:02 回复

仙士可博客

诗与远方:不错

2018-08-31 17:30:13 回复

仙士可博客

心雨:07d28a52de29458e5ff250b388b462bf好得很

2018-03-03 17:37:21 回复

仙士可博客
  • 仙士可 回复 心雨:你们从哪来的这个md5
  • 2018-03-03 17:37:55 回复
仙士可博客

Lmu_Xuzl:冒泡

2018-03-02 14:44:33 回复

仙士可博客

国飞Zhang。:9ec504cb887c6f9fb64039126558d2f3求破解MD5

2018-02-24 16:57:07 回复

仙士可博客
  • Lmu_Xuzl 回复 国飞Zhang。:666
  • 2018-03-02 15:04:05 回复
仙士可博客
  • Lmu_Xuzl 回复 Lmu_Xuzl:666
  • 2018-03-02 15:04:20 回复
仙士可博客
  • Lmu_Xuzl 回复 Lmu_Xuzl:111
  • 2018-03-08 11:26:55 回复
  • 本站由白俊遥博客程序搭建
    © 2017-1-17 php20.cn 版权所有 ICP证:闽ICP备17001387号
  • 联系邮箱:1067197739@qq.com