Mysql大数据深分页速度慢优化
2026/7/19 10:51:59 网站建设 项目流程

Mysql: 8.0.29

数据量:628W条

主键字段:id

一、Mysql分页原理

示例语句: SELECT * FROM test_logistics_contract_info LIMIT 5000000,10;

PS1:理论上生产环境不禁止SELECT * ,哪怕会用到所有的字段,这里只是示例语句。

执行原理 :

先执行 SELECT * FROM test_logistics_contract_info LIMIT 5000010;放入Mysql内存中

再取最后的10条返回

效率:

分页越深,效率越低,如果取全表的最后10条,相当于全表扫描。

二、俩种SQL语句级别优化和效率对比

原版语句: 执行时间 7.338秒

优化语句一: 查询时间 0.143秒 比原版的零头还低

SELECT a.* FROM test_logistics_contract_info a INNER JOIN (SELECT id FROM test_logistics_contract_info LIMIT 500000,10) as b
on a.id = b.id

原理:利用 InnoDB 的回表机制,先拿所需要数据的主键,再用主键拿数据。

优化二:查询时间 0.0秒(纳秒级别了) 比原版的零头的零头还低

SELECT * FROM test_logistics_contract_info WHERE id >= 5066186 LIMIT 10;

原理:先拿到上次分页的最后一条数据id,然后用id精准定位数据的位置。

缺点:禁止跳页,每次都必须拿到上一页的最后一条数据的id

PS2:Mysql自增主键具有不连续性,用页数*每页条数得到的数字作为id是不准确的(比如物理删除的数据,或者批量添加数据)

PS3:Mysql还有唯一索引不唯一的特性( ^_^!!)

三、其他优化方式

1、禁止深分页(使用多)

某东、某宝的分页都限定了100页

2、用适合大数据分页的DB 存数据 (省心)

比如es(GB~TB级别) Hbase(PB级别)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询