优化深度分页
如果目前是移动端的话,建议使用 移动端列表查询最佳实践。
深度查询的问题在于开发者使用 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 应直接返回,避免执行后面的分页语句。