mysql大量关键查询优化_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条记录,大大的提升了查询速度

实例图:

6c72c35f00f7f8db456f9510df17c684.png

普通方法查询,0.123秒

上一页最后一个的id为20000,则

a5bebb341b50b353717a09b8448bf335.png php方法查询,0.070秒

6352c3de5b749906ff3d0d96c8d886bb.png

mysql索引覆盖查询,0.089秒

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值