mysql 深度翻页如何解决

2022-06-18 11:38:52

深度翻页
一张 200w 的表, 每页 100 条数据, 想要获取第 19999 页的数据, 耗时 1.317s

select*from t_personlimit1999801,100;

查询性能会很差, 因为 limit 的原理是查询前 1999900 条数据, 并丢弃前 1999800 条数据, 剩余后面 100 条数据返回

这里有两种方式

  • id 自增 (要确保展示的数据 id 是连续的才行) 0.012s
select*from t_personwhere id>1999800limit100
  • 覆盖索引 (即 limit 大页时, 只查询带索引的字段) 1.477s, 即耗时更久
select*from(select idfrom t_personlimit1999800,100) aleftjoin t_person bon a.id= b.id

总结: 还是要避免 limit 深度分页, 有性能问题

  • 作者:艾斯比的日常
  • 原文链接:https://blog.csdn.net/u012745499/article/details/119066747
    更新时间:2022-06-18 11:38:52