許多開發者依賴 LIMIT m,n 實作分頁。有索引時速度尚可,但複雜條件搜尋配合 ORDER BY 時,MySQL 必須先掃描所有符合條件的記錄、排序,再取出第 m-n 筆。資料量達幾十萬、用戶搜尋熱門關鍵字並翻閱末頁時,磁碟 I/O 暴增,效能崩潰。
參考 ASP Recordset、SQL Server 游標/存儲過程分頁機制,設計 MySQL 模擬「儲存分頁」方案:
SELECT id FROM table WHERE condition ORDER BY field LIMIT max_pages * page_size 取得符合條件的所有 ID(或限定上限)。$IDs[page][id_list],附加唯一標識防多視窗查詢衝突。SELECT * FROM table WHERE id IN (id1,id2,...),極速回傳。SELECT ... INTO temp_table ... 一次完成。