MySQL LIMIT クエリの OFFSET がクエリ パフォーマンスに与える影響
MySQL で大規模なデータセットを操作する場合、OFFSET を指定した LIMIT の使用は大きな影響を与える可能性がありますクエリのパフォーマンス。これは、ORDER BY 基準として PRIMARY KEY を使用する場合に特に顕著です。たとえば、OFFSET が小さい次のクエリ:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
は、OFFSET が大きいクエリよりもはるかに高速に実行されます:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
これは、両方のクエリが同じものを取得する場合でも当てはまります。レコード数 (30)。
OFFSET について影響
この現象を理解するには、MySQL のクエリ実行プランを調べる必要があります。 OFFSET を指定して ORDER BY を使用する場合、MySQL はまず指定された基準に従ってテーブル全体を並べ替える必要があります。次に、指定された数のレコード (OFFSET) をスキップし、必要な数のレコード (LIMIT) を取得します。この並べ替えプロセスは、OFFSET が増加し、テーブル サイズが大きくなるにつれて、ますます高価になります。
最適化手法
このようなクエリを最適化するには、範囲ベースのクエリを利用することをお勧めします。 OFFSET のみに依存するのではなく、取得アプローチを使用します。これは、前のフェッチからの最後のレコードの ID を保持し、WHERE 条件を追加することで実現できます。
WHERE id > lastId LIMIT 0, 30
オフセットをゼロに維持し、前のセットの最後の ID に基づいてレコードを取得することで、コストのかかるレコードを効果的に排除できます。並べ替え操作。その結果、特に大きなテーブルの場合、クエリのパフォーマンスが大幅に向上します。
以上がLIMIT クエリにおける MySQL の OFFSET はパフォーマンスにどのような影響を及ぼしますか?また、どのように最適化できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。