MySQL中的超大分页如何处理?
select * from t limit 0,10;
select * from t limit 90000,10
这两条SQL的查询所消耗的时间是不一样的,后者耗费的时间更多;因为需要先将90010条记录查出来排序,然后将前面的90000条记录去除,最后将剩下的10条记录返回。
那么如何解决这种效率问题呢?
通过 覆盖索引和子查询 来解决。
比如:select * from t ,(select a.id from t a order by a.id limit 90000,10) b where t.id=b.id;
先通过子查询的覆盖索引不需要回表将10条id记录筛选出来,然后主键id作为连表条件,不回表直接将数据返回。