深度翻页
一张 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 深度分页, 有性能问题