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 ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

推薦する

Alibaba Cloudのセキュリティルール設定の詳細な説明

2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...

Docker+K8S クラスタ環境構築と分散アプリケーション展開

1. Dockerをインストールする yumでdockerをインストール #サービスを開始する sy...

初心者がHTMLタグを学ぶ(3)

関連記事:初心者が学ぶ HTML タグ (2)導入された HTML タグは、必ずしも XHTML 仕...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...

HTML+CSS3+JSで実装されたドロップダウンメニュー

成果を達成する html <div class="コンテナ"> &l...

MySQL ストアド プロシージャにおけるループ ステートメント (WHILE、REPEAT、LOOP) の使用法の分析

この記事では、例を使用して、MySQL ストアド プロシージャでのループ ステートメント (WHIL...

React Hooksの詳細な説明

目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...

GoのDockerデプロイメント用の基本イメージ2つの実装

1. golang:最新のベースイメージ mkdir gotest タッチメイン.go Docker...

Vue3 の動的コンポーネントはどのように機能しますか?

目次1. コンポーネントの登録1.1 グローバル登録1.2 グローバルコンポーネントの登録プロセス1...

シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

ワンクリック実行仮想マシンに Python 3.8 をインストールするには、ネットワーク アダプター...

JavaScript を学ぶときに知っておくべき 3 つのヒント

目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...

Vue3 ベースのフルスクリーン ドラッグ アップロード コンポーネント

この記事は主に、みんなで共有できるVue3ベースのフルスクリーンドラッグアップロードコンポーネントを...

Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

使用シナリオ:プロジェクトのページでは、頻繁に変更されず、個別のカスタマイズも伴わない大量のデータを...

LED を使って Linux カーネルを使い始める方法を探る

目次序文LEDトリガー探索を始めるLEDデバイス登録LEDディレクトリ類推によって理解するクラスディ...