mysql limit 越大越慢_mysql 优化之14:php mysql limit 分页优化,页面值越大查询越慢...

php mysql limit 分页优化,页面越大查询越慢

一、测试前言

当前测试表:nodes_hierarchy目前数据量为20多万

程序分页中我们经常使用的核心sql语句select * from nodes_hierarchy limit 开始,长度(偏移量);

当nodes_hierarchy数据量小的时候,此结构语句没有性能问题,但是如果数据量很大,分页越到后面,效率越低下。

二、通过执行时间来测试select * from nodes_hierarchy limit 0,20            0.002s

select * from nodes_hierarchy limit 10000,20        0.007s

select * from nodes_hierarchy limit 11000,20        0.006s

select * from nodes_hierarchy limit 110000,20       0.044s

select * from nodes_hierarchy limit 260000,20       0.102s

三、通过查询行数来测试,使用explain

explain select * from nodes_hierarchy limit 260000,20

结果提示:查询行数272377 (是nodes_hierarchy表中数据的总数)

说明是,对表进行全量查询之后,获取我们所要的数据。全量查询当然是,数据越大性能越差

四、优化

直接上语句select * from nodes_hierarchy where id >= (select id from nodes_hierarchy order by id asc limit 260000,1) limit 20     0.061s

select * from nodes_hierarchy n join (SELECT id from nodes_hierarchy order by id asc limit 260000,20) b on n.id = b.id    0.061s

比较:select * from nodes_hierarchy limit 260000,20       0.102s 发现的确快了很多。

仔细看上面2个优化之后的查询语句,发现在子查询中用到了主键id,其实本质是利用主键索引,因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

总结:

limit语句的查询时间与起始记录的位置成正比

mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用

54f388e703b86f6b908853d42bf37614.png.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值