MySQL ジョイントインデックスの使用ルール

MySQL ジョイントインデックスの使用ルール

結合指数は複合指数とも呼ばれます。複合インデックスの場合: MySQL はインデックス内のフィールドを左から右に使用します。クエリではインデックスの一部のみ、つまり左端の部分のみを使用できます。たとえば、インデックスはキーインデックス (a,b,c) です。a | a,b | a,b,c の 3 つの組み合わせの検索はサポートできますが、b,c の検索はサポートしていません。左端のフィールドが定数参照の場合、インデックスは非常に効果的です。

興味深い質問から始めましょう:

テーブルに結合インデックス (c1、c2、c3、c4) があるとします。どのフィールドがインデックスを使用しますか?
c1=x かつ c2=x かつ c4>x かつ c3=x の場合
B、c1=x、c2=x、c4=x、c3の順序
C、c1=x、c4=x の場合、c3、c2 でグループ化
D ここで c1=? かつ c5=? で c2,c3 の順
E ここで c1=? かつ c2=? かつ c5=? で c2,c3 の順序

始めましょう:

まずテーブルを作成します。

テーブル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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 独立インデックスと共同インデックスの選択
  • MySQL ジョイントインデックス(複合インデックス)の実装
  • MySQLジョイントインデックスの左端一致原則の詳細な分析
  • MySQLのジョイントインデックス機能の分析と使用例
  • MySQL ジョイントインデックスの使用例
  • MySQL のジョイントインデックス学習チュートリアル
  • MySQL のインデックス有効条件とインデックス無効条件の結合

<<:  CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

>>:  iframe パラメータの説明と例

推薦する

Linux/CentOS サーバー セキュリティ構成の一般ガイド

Linux はオープン システムです。インターネット上には、既成のプログラムやツールが多数存在します...

Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法

序文Linux 上で jar パッケージを実行する方法は誰もが知っています。なぜ別々に話したいのでし...

LinuxサーバのSSHクラッキング防止方法(推奨)

1. Linuxサーバーは、/etc/hosts.denyを設定して、相手のIPがSSH経由でサー...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

CSS スタイルを HTML 外部スタイルシートにインポートする方法

リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...

MySQL パーティションテーブルのベストプラクティスガイド

序文:パーティショニングはテーブル設計パターンです。一般的に、テーブル パーティショニングとは、条件...

Baota LinuxパネルにFTP接続できない問題の解決方法の詳細な説明

Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...

React、Angular、Vueの3つの主要なフロントエンド技術の詳細説明

目次1. 反応する基本的な使い方注目すべき機能クラスコンポーネント仮想DOMライフサイクルメソッドJ...

純粋なCSSでデジタルプラスとマイナスボタンを実装するための最適なソリューション

序文:デジタル加算ボタンと減算ボタンの実装には、次のような多くのソリューションがこれまでに使用されて...

Dockerイメージとコンテナの一般的な操作の詳細な説明

画像アクセラレータ中国の Docker Hub からイメージをプルすることが難しい場合があります。こ...

Google 翻訳ツール: 多言語ウェブサイトを素早く実装

Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...

Windows に MySQL 8.0.16 をインストールする手順とエラーの解決方法

1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

VMware は Centos7 システムの PXE+kickstart 無人インストールの詳細なプロセスを実装します

目次PXEはサーバーの無人バッチ展開を実装します1. PXEの概要1.1 PXEとは何か1.2 キッ...