最新消息: 新版网站上线了!!!

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

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


一、测试前言

数据库:mysql

当前测试表: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语句是很方便,但是对记录很多的表并不适合直接使用

.....

转载请注明:谷谷点程序 » mysql 优化之14:php mysql limit 分页优化,页面值越大查询越慢