ホームページ >データベース >mysql チュートリアル >MySQL クエリで OFFSET 値が大きいとなぜ速度が非常に遅くなるのですか?

MySQL クエリで OFFSET 値が大きいとなぜ速度が非常に遅くなるのですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-18 04:01:09770ブラウズ

Why Are High OFFSET Values in MySQL Queries So Slow?

MySQL での高い OFFSET 値によるクエリ パフォーマンスの低下

クエリの実行が遅い原因は、過剰な CPU 使用率またはメモリ消費であることがよくあります。ただし、場合によっては、LIMIT オフセットが高い一見無害なクエリでも、重大なパフォーマンスのボトルネックが発生する可能性があります。

問題: OFFSET の増加はクエリ速度に影響します

検討してください1,600 万を超えるレコードを含む大規模なテーブルを含むシナリオ。

SELECT * FROM large ORDER BY `id` LIMIT 0, 30

のようなクエリは、

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30

よりもかなり高速に実行されます。どちらのクエリも同じ数のレコードを取得しますが、後者のクエリのオフセット値 10,000 によりパフォーマンスが低下します。

を理解する問題

MySQL は、データを取得するときにインデックス スキャンまたはフル テーブル スキャンを使用します。オフセット値が適用されると、MySQL はテーブルの一部をスキャンして結果セットの開始点を取得する必要があります。オフセット値が増加すると、テーブル スキャンがより広範囲になり、実行時間が長くなります。

最適化ソリューション: 高い OFFSET 値を避ける

このようなクエリを最適化するには、次のことを避けてください。高い OFFSET 値を使用します。代わりに、別のアプローチを使用することを検討してください:

  1. 増分クエリを使用する: OFFSET を固定値で増分する代わりに、最後にフェッチされた ID を保持し、それを開始点として使用します。次のクエリ。このアプローチにより、テーブル スキャンの必要性がなくなり、パフォーマンスが大幅に向上します。
  2. ページングの実装: 結果セットを管理可能なサイズのページに分割します。各ページはゼロの OFFSET 値を使用して取得できるため、最適なパフォーマンスが保証されます。

以上がMySQL クエリで OFFSET 値が大きいとなぜ速度が非常に遅くなるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。