ホームページ >データベース >mysql チュートリアル >LIMIT オフセットが大きい MySQL クエリが非常に遅いのはなぜですか?

LIMIT オフセットが大きい MySQL クエリが非常に遅いのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-13 01:17:09560ブラウズ

Why Are MySQL Queries with Large LIMIT Offsets So Slow?

LIMIT オフセットの増加が MySQL クエリ速度に与える影響

ORDER BY と組み合わせて LIMIT オフセットを増加させて大規模な MySQL テーブルをクエリする場合、ユーザーはクエリ速度の顕著な低下に遭遇する可能性があります。これは、テーブルのレコード数が 1,600 万を超える場合、またはテーブルのサイズが約 2 GB である場合に特に顕著です。

たとえば、オフセットが小さい次のクエリは、オフセットが大きいクエリよりも大幅に高速に実行されます。

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

どちらのクエリも 30 行しか取得しませんが、後者のクエリは ORDER のオーバーヘッドが無視できるにもかかわらず、かなり時間がかかります。 BY.

このシナリオを最適化するには、別のアプローチの使用を検討してください:

  1. フェッチされた行セットの最後の ID を保存します (例: lastId = 530)。
  2. 条件 WHERE id > を含むようにクエリを変更します。 lastId.
SELECT * FROM large WHERE `id` > lastId LIMIT 0, 30

ゼロ オフセットを一貫して維持することにより、反復で大量のデータをフェッチする場合でも、クエリは常に最適な速度で実行されます。

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

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