MySQL のインデックス有効条件とインデックス無効条件の結合

MySQL のインデックス有効条件とインデックス無効条件の結合

1. ジョイントインデックスの故障の条件

結合指数は複合指数とも呼ばれます。 2 つ以上の列のインデックスは複合インデックスと呼ばれます。

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

インデックス内の追加の列を使用すると検索の範囲を絞り込むことができますが、2 つの列を持つ 1 つのインデックスを使用することは、2 つの個別のインデックスを使用することとは異なります。複合インデックスの構造は電話帳に似ており、人の名前は姓と名で構成されます。電話帳は、最初に姓のペアで並べ替えられ、次に同じ姓を持つ人の名前のペアで並べ替えられます。電話帳は、姓がわかっていれば非常に便利ですが、名と姓の両方がわかっていればさらに便利ですが、名しかわかっていなければ役に立ちません。

したがって、複合インデックスを作成するときは、列の順序を慎重に考慮する必要があります。複合インデックスは、インデックス内のすべての列または最初の数列のみを検索する場合に便利です。ただし、後続の列のみを検索する場合には役立ちません。

たとえば、名前、年齢、性別の複合インデックスを作成します。

    テーブルmyTestを作成します(
         整数、
         b 整数、
         c 整数、
         キーa(a,b,c)
    );

(1) select * from myTest where a=3 and b=5 and c=4; ---- abc順
3 つのインデックス abc はすべて where 条件で使用され、それぞれが役割を果たします。

(2)c=4かつb=6かつa=3の場合、myTestから*を選択する。
where 内の条件の順序は、クエリを実行する前に MySQL によって自動的に最適化され、効果は前の文と同じです。

(3) a=3かつc=7の場合、myTestから*を選択する。
A はインデックスを使用し、B は使用しないため、C はインデックス効果を使用しません。

(4) select * from myTest where a=3 and b>7 and c=3; ---- b 範囲値、ブレークポイント、c のインデックスをブロック
a が使用され、b も使用されますが、c は使用されません。この場合、b は範囲値であり、これもブレークポイントですが、インデックス自体が使用されます。

(5) select * from myTest where b=3 and c=4; --- 結合インデックスは順番に使用する必要があり、すべてを使用する必要があります。インデックスaは使用されていないため、インデックスbとcはここでは使用されません。

(6) a>4かつb=7かつc=9の場合、myTestから*を選択する。
a は使用されており、b は使用されておらず、c は使用されていません

(7) myTestから*を選択し、a=3でbで順序付けする。
a はインデックスを使用し、b も結果のソートでインデックスの効果を使用します。a より下の b のセグメントはすべてソートされます。

(8) myTestから*を選択し、a=3でcで順序付けする。
aはインデックスを使用しますが、cは途中でブレークポイントがあるため、ソート効果がありません。explainを使用してfilesortを確認してください。

(9) mytableからb=3の順序で*を選択し、aで並べ替えます。
bはインデックスを使用せず、aはソート処理でインデックスの役割を果たさない。

2. インデックス失敗の条件

  • インデックス列に対して操作 (計算、関数、(自動または手動の) 型変換) を実行しないでください。実行すると、インデックスが失敗し、完全なテーブル スキャンに切り替わります。
  • ストレージエンジンは、インデックス範囲条件の右側の列を使用できません。
  • カバーリングインデックス(インデックスのみにアクセスするクエリ(インデックス列とクエリ列が一貫している))を使用し、選択を減らすようにしてください*
  • MySQL では、不等式 (!= または <>) を使用する場合にインデックスを使用できないため、テーブル全体がスキャンされます。
  • はnull、はnullではなく、インデックスも使用できません ---- ここで疑問があります。テスト後、確かに使用できます。refレベルとconstレベルはすべてではありません
  • like がワイルドカード文字 ('%abc...') で始まる場合、MySQL インデックスは失敗し、操作は完全なテーブル スキャンになります。質問: '% string %' のような場合にインデックスが使用されない問題を解決するにはどうすればよいですか?

一重引用符なしでは文字列のインデックス作成が失敗する

SELECT * from staffs where name='2000'; -- MySQL は最下位レベルで暗黙的な型変換を実行するため SELECT * from staffs where name=2000; --- インデックスは使用されません

一般的なアドバイス

  • 単一キー インデックスの場合は、現在のクエリに対してフィルタリング パフォーマンスが優れているインデックスを選択するようにしてください。
  • 複合インデックスを選択すると、現在のクエリ内で最適なフィルタリング プロパティを持つフィールドが、インデックス フィールド順序で可能な限り早い順位にランク付けされます。
  • 複合インデックスを選択するときは、現在のクエリの where 句にさらに多くのフィールドを含めることができるインデックスを選択するようにしてください。
  • 統計を分析し、クエリの記述方法を可能な限り調整して、適切なインデックスを選択するようにしてください。

MySQL ジョイントインデックスの有効性条件とインデックス無効化条件に関するこの記事はこれで終わりです。MySQL ジョイントインデックスの有効性に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースのインデックスと障害シナリオの詳細な説明
  • MySQL のインデックス障害の一般的なシナリオと回避方法
  • MySQL インデックス失敗の原理
  • MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法
  • MySQL インデックスが失敗する 15 のシナリオを共有する

<<:  Javascript ファイルと Blob の詳細な説明

>>:  RHCE ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

推薦する

Docker-compose を使用して ELK をデプロイするためのサンプル コード

環境ホストIP 192.168.0.9 Docker バージョン 19.03.2 docker-co...

MySQLデータベースの増分バックアップのアイデアと方法

MySQL データベースの増分バックアップを実行するには、データベース構成ファイル /etc/my....

フロントエンド JavaScript におけるリフレクションとプロキシ

目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...

MySQL 8.0 ディクショナリテーブル拡張の詳細な説明

MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...

キャンバスをベースにした超クールな水光効果を実現

この記事の例では、キャンバスをベースにした超クールな水の光の効果を実装するための具体的なコードを参考...

Dockerfile における ENTRYPOINT と CMD の違い

Docker システムの学習チュートリアルでは、Dockerfile を使用して Docker イメ...

JavaScript 定期検証パスワード強度実装方法

展示する デザインパスワード強度分析パスワードは数字、文字、特殊記号で構成されていますパスワード: ...

MySQLの行ロックとテーブルロックの意味と違いの詳細な説明

1. はじめに行ロックとテーブルロックの違いは面接で頻繁に出てくるはずです。MySQL のロックにつ...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...

Windows で MySQL マスター スレーブ レプリケーションを構成する方法

MySQL マスター/スレーブ レプリケーションを使用すると、1 つのデータベース (マスター デー...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

Docker、Nginx、Jenkins をベースにした自動フロントエンド デプロイメント

目次事前準備展開ターゲットDocker環境構築クラウドサーバーに接続Docker環境をインストールす...

Windows Server win2003、win2008R2、win2012、win2016、win2019 システム バージョン間の違い

最近、Microsoft は 2019 サーバー システムをリリースしました。一般的に、Micros...

HTML入門チュートリアル HTMLタグ記号をすぐにマスター

補足<br />HTML について何も知らず、HTML の始め方がまだわからない場合は、...

el-table のテーブルを最適化するために仮想リストを使用する方法についての簡単な説明

目次序文解決具体的な実装満たすべき前提条件質問序文テーブルをよく使用します。データ量が多い場合は直接...