SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
關鍵:確保使用索引。例:WHERE category_id = 123 ORDER BY id LIMIT 50, 10,在 (category_id, id) 建立複合索引最佳。
隨頁碼增大,LIMIT 10000, 10 偏移量極大,速度明顯變慢。MySQL 需掃描前 10000 行再丟棄,代價高昂。
利用覆蓋索引特性,先在索引上定位偏移位置的主鍵,再回表查詢:
SELECT * FROM articles
WHERE category_id = 123
AND id >= (
SELECT id FROM articles
WHERE category_id = 123
ORDER BY id LIMIT 10000, 1
)
LIMIT 10;
子查詢僅掃描索引 (極快) 獲取第 10001 行的 id,外層查詢直接定位該 id 之後的 10 行,避免大偏移掃描。