一、数据库层 SQL 优化

1、使用 where

每次查询时带上上一页的最大 ID
select * from users where id>10000 limit 10

2、利用子查询优化超大表分页

比如:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id ,先快速定位需要获取的 id 段,然后再关联查询。MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写,利用子查询先快速定位需要获取的 id 段,然后再关联查询,就是对分页进行 SQL 改写的具体实现;
例:
SQL_1: SELECT a.* FROM users a, (select id from users WHERE 条件 LIMIT 1000000,20 ) b where a.id=b.id
SQL_2: SELECT id from users WHERE 条件 LIMIT 1000000,20
SQL_1 性能可达 SQL_2 的 1.5 倍

二、程序层面优化

利用缓存把查询的结果缓存起来,这样再下一次查询的时候性能就非常高。