提升海量表上的 PostgreSQL 分頁表現
使用 OFFSET
從大型 PostgreSQL 表(數百萬行)檢索分頁資料會嚴重影響查詢速度。本文提出了一種卓越的最佳化策略:鍵集分頁。
鍵集分頁:更有效的方法
鍵集分頁透過利用上一頁中最後一行的值來避免 OFFSET
的效能缺陷。 這是查詢:
<code class="language-sql">SELECT * FROM big_table WHERE (vote, id) > (vote_x, id_x) ORDER BY vote, id LIMIT n;</code>
vote_x
和 id_x
代表上一頁最後一行的 vote
和 id
。 這允許資料庫有效地跳過行,與 OFFSET
.
索引增強
為了獲得最佳效能,請在 WHERE
子句中使用的欄位上建立索引:
<code class="language-sql">CREATE INDEX vote_order_asc ON big_table (vote, id);</code>
重要提示:
(vote, id)
組合必須是唯一的,以確保結果一致。 ORDER BY
子句的方向必須與索引的方向相符。 ORDER BY
方向的查詢。 進一步閱讀:
以上是鍵集分頁如何最佳化大偏移量的 PostgreSQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!