sql
SELECT t1.*
FROM large_table t1
JOIN (
SELECT id
FROM large_table
ORDER BY create_time
LIMIT 1000000, 10
) t2 ON t1.id = t2.id;
优点:
子查询只返回主键ID,利用索引覆盖
减少回表操作,降低IO消耗
适合需要排序的分页查询
3、使用游标(Cursor)
sql
DECLARE cur CURSOR FOR
SELECT * FROM large_table ORDER BY id;
每次获取指定行数
FETCH NEXT 10 ROWS FROM cur;
优点:
服务器端维持状态,避免重复计算
适用于需要保持连接的分页场景
4、其他优化策略
4.1 索引优化
确保排序字段和WHERE条件字段有合适的索引:
sql
CREATE INDEX idx_created ON large_table(create_time);
4.2 避免SELECT *
只查询必要字段:
sql
SELECT id, name, created FROM large_table ...
4.3 分区表
对大表进行分区:
sql
CREATE TABLE partitioned_table (
id INT PRIMARY KEY,
...
) PARTITION BY RANGE(id) (
PARTITION p0 VALUES LESS THAN (1000000),
PARTITION p1 VALUES LESS THAN (2000000),
...
);