大きなオフセットを使用して MySQL LIMIT クエリを最適化するには?

Linda Hamilton
リリース: 2024-11-11 06:01:03
オリジナル
284 人が閲覧しました

How to Optimize MySQL LIMIT Queries with Large Offsets?

大きなオフセットを使用した MySQL LIMIT クエリの最適化

LIMIT 句は、通常、MySQL テーブルからレコードのサブセットを取得するために使用されます。ただし、オフセット値 (m) が大きくなると、クエリのパフォーマンスが大幅に低下する可能性があります。これは、MySQL が通常、シーケンシャル スキャンを使用して、目的のオフセットに達するまでテーブル全体を走査するためです。

このパフォーマンスの問題を軽減するには、データベースの主キーに対応するシーケンシャル キーを確立するインデックス テーブルを作成することを検討してください。ターゲットテーブル。 「インデックス テーブル」として知られるこの補助テーブルは、ターゲット テーブルと目的の行の間のブリッジとして機能します。

インデックス テーブルをターゲット テーブルに結合することで、WHERE 句を使用して効率的に実行できます。必要な特定の行を取得します。このアプローチを実装する方法は次のとおりです。

  1. インデックス テーブルの作成:
CREATE TABLE seq (
   seq_no int not null auto_increment,
   id int not null,
   primary key(seq_no),
   unique(id)
);
ログイン後にコピー
  1. インデックス テーブルの作成:
TRUNCATE seq;
INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
ログイン後にコピー
  1. 最適化されたクエリを実行します:

オフセット 1,000,000 および制限 1000 の行を取得するには、次のクエリを実行します:

SELECT mytable.* 
FROM mytable 
INNER JOIN seq USING(id)
WHERE seq.seq_no BETWEEN 1000000 AND 1000999;
ログイン後にコピー

この最適化されたクエリは、インデックス付けテーブルを活用して、順次スキャンをバイパスし、目的の行に直接アクセスします。その結果、オフセット値が大きい場合でも、パフォーマンスが大幅に向上するはずです。

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

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