大規模なテーブルでの 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 中国語 Web サイトの他の関連記事を参照してください。