跳转到内容

优化深度分页

如果目前是移动端的话,建议使用 移动端列表查询最佳实践

深度查询的问题在于开发者使用 limit 10000,10 时候,是先查询 10010 条记录后抛弃前 10000 条数据,结果最终返回给用户。

如果能在体验上提升查询功能,优先提升查询功能。让用户无需深度查询。

如果可以使用其他技术,则使用 ES 来处理查询。

如果依次查询下一页或在 PC 端也采取下拉加载的方式。通过记住上一次的查询条件,也可以大大优化查询。可以参考 移动端列表查询最佳实践。同时也要考虑在前端使用虚拟列表以避免卡顿。

上述条件都走不通的情况下,《高性能的 MYSQL》介绍了一种优化方法:

SELECT id, desc FROM book ORDER BY title LIMIT 50, 5

优化为

SELECT id, desc FROM book
INNER JOIN (
SELECT id FROM book
ORDER BY
title
limit
50, 5
) AS lim USING (id)

这种方法被称为“延迟连接”,它允许服务器再不访问行的情况下检查索引中尽可能少的数据(覆盖索引)。一旦找到所需的行,则让他们与整个表联接,从当前行再进行检索。

同时,代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。