在LIMIT 子句中使用大偏移量來提高MySQL 效能
在MySQL SELECT 查詢的LIMIT 子句中應用顯著偏移量時面臨效能下降?當偏移量(以“m”表示)超過某個閾值(例如 1,000,000)時,就會出現此問題,導致查詢執行緩慢。
雖然對於特定表場景使用 LIMIT 子句至關重要,但有一種方法來優化效能,而無需求助於基於 ID 範圍的過濾(「id > 1,000,000 limit n」)等替代方案。
基於索引表的最佳化
考慮建立一個與目標表的主鍵建立順序關係的索引表。這種索引方法可以顯著提高查詢效能。
創建索引表:
CREATE TABLE seq ( seq_no int not null auto_increment, id int not null, primary key(seq_no), unique(id) );
填充序列:
TRUNCATE seq; INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
使用索引最佳化查詢:
要從1,000,000 的偏移量取得1000 行:
SELECT mytable.* FROM mytable INNER JOIN seq USING(id) WHERE seq.seq_no BETWEEN 1000000 AND 1000999;
以上是如何最佳化 LIMIT 子句中具有大 OFFSET 的 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!