LIMIT OFFSET を高くした場合の MySQL クエリのパフォーマンスへの影響
LIMIT 句と大きなテーブルを使用して SELECT クエリを実行する場合、高い値を設定するとオフセット値により、クエリの実行時間が大幅に遅くなる可能性があります。この動作は、主キーを指定して ORDER BY 句を使用する場合に特に顕著です。
たとえば、1,600 万件を超えるレコード (サイズ 2GB) を持つ「large」というテーブルについて考えてみましょう。次のようなクエリ:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
は、次のようなオフセットが大きいクエリと比べてはるかに高速に実行できます。
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
どちらのクエリも同じ数のレコード (30) を取得します。 ) は、パフォーマンスの違いが ORDER BY 操作のオーバーヘッドによるものではないことを示しています。
クエリを最適化するには、次のことをお勧めします。高い LIMIT オフセットの使用を最小限に抑えます。代わりに、WHERE 句を使用して既知の識別子に基づいてレコードを選択することを検討してください。これによりオフセットがゼロになります。
たとえば、最新の 30 行を取得することが目標の場合、次のクエリを使用できます。 :
SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30
このアプローチでは、最後の既知の ID (last_known_id) の記録を維持することにより、クエリを常にオフセット 0 から開始できるようになり、大幅に改善されます。パフォーマンス。
以上がMySQL クエリで LIMIT OFFSET 値を高くすると非常に遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。