深分页如何解决
为什么会造成深分页?
假如有张百万数据的表,你想通过分页的方式来展示这些数据。当用户请求第1w页数据时,假设
pagesize=10,那么最终是9万9千,10。数据库必须先扫描前9万9千条数据,才能返回第1w页的数据,
如果你查询返回的字段不在索引中,需要回表很多次,性能明显很低
怎么优化?
假设:SELECT c1, c2, cn… FROM table WHERE name = “Hollis” LIMIT 1000000,10
1.子查询+jion优化
1 | SELECT c1, c2, cn... |
这样的话就不需要每条记录都回表
2.子查询+ID过滤
1 | SELECT c1, c2, cn... |
缺点就是ID一定得是自增的
3.记录上一个ID,即游标字段
4.如果是基于文本的搜索,使用ES