- 原sql
SELECT * FROM table1 limit 300000, 10
explain type结果为all
- 方案1:覆盖索引
SELECT id FROM table1 limit 30000, 10
explain type结果为index
- 方案2:覆盖索引+join
SELECT * FROM table1 t1
INNER JOIN SELECT id FROM table1 limit 30000, 10 t2 ON t1.id = t2.id
- 方案3:覆盖索引+子查询
SELECT * FROM table1 t1
WHERE t1.id >= (SELECT id FROM table1 limit 30000, 1)
LIMIT 10;
- 方案4:范围查询+limit(需要获取上一页最大的id)
SELECT * FROM table WHERE id >= #{maxId} LIMIT 10
- 方案5:如果能获得起始主键和结束主键
SELECT * FROM table WHERE id BETWEEN #{minId} AND #{maxId}
- 方案6:禁止传入过大页码
网友评论