インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、そのインデックスは「カバーリング インデックス」と呼ばれます。 カバーリング インデックスは、クエリのパフォーマンスを大幅に向上できる非常に強力なツールです。データを読み取るのではなく、インデックスを読み取るだけで済みます。次の利点があります。 1. インデックス エントリは通常レコードよりも小さいため、MySQL がアクセスするデータも少なくなります。 2. インデックスは値のサイズによって保存されるため、ランダム アクセス レコードよりも I/O が少なくなります。 3. データ エンジンはインデックスをより適切にキャッシュできます。たとえば、MyISAM はインデックスのみをキャッシュします。 4. InnoDB はクラスター化インデックスを使用してデータを整理するため、カバーリング インデックスは InnoDB に特に役立ちます。クエリに必要なデータがセカンダリ インデックスに含まれている場合は、クラスター化インデックスで検索する必要はありません。 制限: 1. カバーリング インデックスはどのインデックス タイプにも適用できません。インデックスには列の値を格納する必要があります。 2. ハッシュ インデックスとフルテキスト インデックスには値が保存されないため、MySQL では BTree のみを使用できます。 3. ストレージ エンジンによってカバーリング インデックスの実装方法は異なり、すべてのストレージ エンジンがカバーリング インデックスをサポートしているわけではありません。 4. カバーリング インデックスを使用する場合は、SELECT リスト値から必要な列を必ず選択してください。SELECT * は使用しないでください。すべてのフィールドをまとめてインデックスすると、インデックス ファイルが大きくなりすぎて、クエリのパフォーマンスが低下します。 知識ポイントの拡張: 1. 2つのパス 実装方法は、まずソートするフィールドと、関連する行データを直接見つけることができるポインタ情報を取得し、次に設定されたメモリ(パラメータ sort_buffer_size で設定)内でソートします。ソートが完了したら、行ポインタ情報を通じて必要な列を再度取得します。 注: このアルゴリズムは 4.1 より前に使用されています。データに 2 回アクセスする必要があります。特に、2 回目の読み取り操作では、多数のランダム I/O 操作が発生します。一方、メモリオーバーヘッドは小さい 2. シングルパスアルゴリズム このアルゴリズムは、必要なすべての列を一度に取り出し、メモリ内で並べ替えて、結果を直接出力します。注: このアルゴリズムは、MySQL 4.1 以降で使用されています。 I/O 操作の回数が減り、効率が向上しますが、大きなメモリ オーバーヘッドも発生します。不要な列を削除すると、ソート処理に必要なメモリが大幅に浪費されます。 MySQL 4.1 以降のバージョンでは、max_length_for_sort_data パラメータを設定することで、MySQL が最初のソート アルゴリズムを選択するか、2 番目のソート アルゴリズムを選択するかを制御できます。取得されたすべての大きなフィールドの合計サイズが max_length_for_sort_data 設定より大きい場合、MySQL は最初のソート アルゴリズムを使用することを選択します。それ以外の場合は、2 番目のソート アルゴリズムを選択します。ソートのパフォーマンスを最大限に向上させるには、当然のことながら 2 番目のソート アルゴリズムを使用することをお勧めします。そのため、クエリでは必要な列のみを取得することが非常に重要です。 結合操作をソートするときに、ORDER BY が最初のテーブルの列のみを参照する場合、MySQL はテーブルに対してファイルソート操作を実行してから結合を実行します。この場合、EXPLAIN は「Using filesort」を出力します。それ以外の場合、MySQL はクエリ結果セット用に一時テーブルを生成し、結合が完了した後にファイルソート操作を実行する必要があります。この場合、EXPLAIN は「Using temporary; Using filesort」を出力します。 上記は、MySQL のカバーリングインデックスに関するナレッジポイントのまとめの詳細内容です。MySQL のカバーリングインデックスとは何かについての詳細は、123WORDPRESS.COM の他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
<<: ubuntu20.04 LTS システムのデフォルト ソース ソース リスト ファイルの変更
いくつかの Qt インターフェース プログラムを作成しましたが、Qt 環境がインストールされていない...
導入js コード文の末尾にセミコロンを追加しても追加しなくても問題ありません。一般的に、チームで開発...
この記事の例では、参考までに簡単な計算機を実装するためのJavaScriptの具体的なコードを共有し...
目次ログインビジネスプロセスログイン機能の実装要約するまず、エフェクトの実装プロセスを見てみましょう...
Promise は、ES6 で導入された非同期プログラミングのための新しいソリューションです。 Pr...
目次序文スタイルローダーCSSローダーsassローダーpostcssローダーバベルローダーtsローダ...
フレックス レイアウトは現在よく使用されるレイアウト方法ですが、場合によっては小さな問題が発生するこ...
最近、弁護士推薦のウェブサイトを作成していたのですが、検索ボックスに問題がありました。検索ボックス内...
理由はインストール後にきちんとアンインストールされなかったためです。この問題を解決するには、次の点に...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...
序文ターミナルを使用してデータベースまたはテーブルを作成するたびに、文字セットが latin1 であ...
目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...
フォーム項目を動的に追加するiview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設...
MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...
1. 互換性以下のように表示されます。 互換性は問題ありません。IE を除き、他のブラウザは基本的に...