ホームページ > データベース > mysql チュートリアル > LIMIT クエリにおける MySQL の OFFSET はパフォーマンスにどのような影響を及ぼしますか?また、どのように最適化できるでしょうか?

LIMIT クエリにおける MySQL の OFFSET はパフォーマンスにどのような影響を及ぼしますか?また、どのように最適化できるでしょうか?

Mary-Kate Olsen
リリース: 2024-12-17 14:04:21
オリジナル
508 人が閲覧しました

How Does MySQL's OFFSET in LIMIT Queries Affect Performance, and How Can It Be Optimized?

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 サイトの他の関連記事を参照してください。

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