ホームページ > データベース > mysql チュートリアル > MySQL で LIMIT オフセットが大きいとクエリのパフォーマンスが低下するのはなぜですか?

MySQL で LIMIT オフセットが大きいとクエリのパフォーマンスが低下するのはなぜですか?

Barbara Streisand
リリース: 2024-12-20 20:19:20
オリジナル
766 人が閲覧しました

Why is Query Performance Degraded with Large LIMIT Offsets in MySQL?

LIMIT オフセットの増加によるクエリ パフォーマンスの低下

データベースでは、オフセットを指定して LIMIT を使用する場合、特に大きなテーブルを扱う場合にパフォーマンスのボトルネックが発生することがよくあります。この問題は、MySQL で、高いオフセット値と ORDER BY を指定した LIMIT OFFSET 句を使用する場合に特に顕著です。

そのような例の 1 つは、1,600 万を超えるレコードがあり、約 2 GB のストレージ領域を占有する「large」という名前のテーブルです。低いオフセット値を使用したクエリの実行:

SELECT * FROM large ORDER BY `id` LIMIT 0, 30
ログイン後にコピー

は、より高いオフセット値を使用した同様のクエリ:

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
ログイン後にコピー

に比べて大幅に高速に完了しますが、両方のクエリは同じ数のレコードを取得します ( 30)、ORDER BY のオーバーヘッドはパフォーマンスの違いを考慮しません。

最適化解決策

この問題に対処してパフォーマンスを向上させるには、別のアプローチを採用できます。大量のデータを収集するためにループ内でオフセットをインクリメントする代わりに、前のデータ セットの最後の ID を保持し、後続のクエリに WHERE 条件を追加できます。

  1. 最後の ID を保存する前のデータセットの、例: lastId = 530。
  2. クエリを次のように再フォーマットします。
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
ログイン後にコピー

ゼロ オフセットを維持し、最後の既知の ID を超えるレコードをクエリすることにより、パフォーマンスを大幅に向上させることができます。

以上がMySQL で LIMIT オフセットが大きいとクエリのパフォーマンスが低下するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート