結合指数は複合指数とも呼ばれます。複合インデックスの場合: MySQL はインデックス内のフィールドを左から右に使用します。クエリではインデックスの一部のみ、つまり左端の部分のみを使用できます。たとえば、インデックスはキーインデックス (a,b,c) です。a | a,b | a,b,c の 3 つの組み合わせの検索はサポートできますが、b,c の検索はサポートしていません。左端のフィールドが定数参照の場合、インデックスは非常に効果的です。 興味深い質問から始めましょう: テーブルに結合インデックス (c1、c2、c3、c4) があるとします。どのフィールドがインデックスを使用しますか? 始めましょう: まずテーブルを作成します。 テーブルtを作成します( c1 CHAR(1) NULLではない、 c2 CHAR(1) NULLではない、 c3 CHAR(1) NULLではない、 c4 CHAR(1) NULLではない、 c5 CHAR(1) ヌルではない )エンジン myisam CHARSET UTF8; c1からc5までの5つのフィールドがあります。フィールドタイプはすべて固定長char(1)型であり、空ではないことに注意してください。文字セットはutf8です(インデックスの計算に使用されるバイト数に関連します) インデックスを作成します。 テーブル t を変更し、インデックス c1234(c1,c2,c3,c4) を追加します。 2 つのレコードを挿入します: insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2','2') MySql Explain を使用して、質問の結果の分析を開始します。 オプションA: 結果からわかるように、c1、c2、c3、c4 はすべてインデックスを使用しており、A の結果を少し変更しています。 c2 条件を削除した後: 左端のインデックス原則によれば、c2 フィールドはインデックスを使用せず、c2 より後のフィールドはインデックスを使用できません。次の 2 つの図では、左端のインデックス原理を比較しています。 上図の結果は、c3 を直接使用すると完全なテーブルクエリになり、インデックスを使用できないことを示しています。したがって、c3 フィールドにインデックスを使用する前提は、c1 フィールドと c2 フィールドの両方でインデックスが使用されていることです。 それがインデックスの一番左の原則(左接頭辞原則)です。 オプションB: key_len の長さは、インデックスが c1 および c2 フィールドで使用されていることを示しています。Extra は、ソートに一時テーブルが使用されていないことを示しています。つまり、インデックスはソートに使用されていますが、key_len 値では計算されておらず、c4 に接続する目的には役立ちません。つまり、インデックスは c3 で壊れていることを意味します。 実際、ソートはジョイント インデックスを使用して直接実行されます。つまり、c1234 ジョイント インデックスを使用すると、c1 の下の c2、c2 の下の c3、c3 の下の c4 がすでに整列しています。したがって、ソートでは実際にはインデックスが使用されますが、c3 フィールドではインデックスは使用されません。 (この段落を書くときはいつも少しぎこちなく感じました。正しく理解しているかどうかわかりません。まださらに調査が必要です) オプションC: グループ化を使用する場合、通常は最初に一時ファイルが生成され、その後ソートされます。ただし、フィールド順序が c2、c3 の場合、一時テーブルはソートに使用されず、インデックスがソートに使用されます。グループ化フィールドが c3、c2 の場合、順序がインデックス フィールドの順序と一致しないため、インデックスはグループ化とソートに使用されません。 key_len の長さによって決定され、c1 フィールドのみがインデックスを使用します。 オプションD: order by は group by に似ています。フィールドの順序がインデックスと一致している場合は、インデックスが並べ替えに使用されます。フィールドの順序がインデックスと一致していない場合は、インデックスは使用されません。 key_len の長さによって決定され、c1 フィールドのみがインデックスを使用します。 オプションE: 実際、オプション E の結果分析は、上記の ABCD の結果で分析されています。ここでは、c1 フィールドと c2 フィールドのみがこのインデックスを使用します。 上記の質問に対する答えをまとめると次のようになります。 A: 4 つのフィールドすべてがこのインデックスを使用します。 B: c1、c2フィールドはこのインデックスを使用します C:c1フィールドはこのインデックスを使用します D:c1フィールドはこのインデックスを使用します E: c1 フィールドと c2 フィールドはこのインデックスを使用します。 要約:インデックスの左端原則(左プレフィックス原則)は、(c1, c2, c3, c4....cN)の結合インデックスのように、インデックスが設定されているフィールドの順序で where 条件を使用します(and 条件を順番に記述しなければならないという意味ではありません)。途中の列に条件がない場合や like を使用した場合は、それ以降の列ではインデックスを使用できません。 インデックスはグループ化や並べ替えにも使用できます。グループ化では、まず並べ替え、次に平均の計算などが必要になります。したがって、グループ化と並べ替えでは、フィールドの順序がインデックス付きフィールドの順序に従うことができれば、インデックスの順序付けされた性質を利用できます。 MySQL ジョイントインデックスの使用ルールに関するこの記事はこれで終わりです。MySQL ジョイントインデックスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります
はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...
この記事は、4G メモリ システム用の MySQL 構成ファイル ソリューションです (主に Inn...
<br />私はこの問題で気が狂いそうです。症状は次のとおりです。 症状の説明: Int...
序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...
最初は、複数の列のコンテンツのサイズと高さが異なります。ここで、表示する背景を異なるものに設定し、各...
wangEditor は、JavaScript と CSS に基づいて開発された Web リッチ テ...
1. はじめに実際のサーバーはパブリックインターネットに直接公開されるべきではありません。そうしな...
目次1. Node.jsとVue 2. ローカル開発環境でフロントエンドのVueプロジェクトを実行す...
概要:市販されているいくつかのタイムテーブルソフトウェアから教訓を得ました。機能が複雑すぎるため、タ...
環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...
1. 公式紹介grep は Linux でよく使用されるコマンドです。これは、ファイルやテキストに対...
目次序文数独の解き方最初のボックスに記入してください2番目のボックスに記入してください3番目のボック...
webpack-dev-server コアコンセプトWebpack の ContentBase と ...
MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...
このセクションでは、HTML のリスト要素について学習します。リストは、Web サイトのデザインにお...