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

推薦する

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

Vue3.0 + TypeScript + Vite初体験の詳しい説明

目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...

MySQL 8.0.12 のインストールと設定方法のグラフィック チュートリアル (Windows10)

この記事は、参考のためにMySQL 8.0.12のインストールグラフィックチュートリアルを記録してい...

MySQL 8.0.12 インストール設定方法とパスワード変更

この記事ではMySQL 8.0.12のインストールと設定方法を参考までに記録します。具体的な内容は以...

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

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

MySQL の条件文で 1 つの情報しか読み取れない問題に対する 2 つの解決策

今日、私の同僚が MYSQL クエリ ステートメントの作成時に非常に奇妙な問題に遭遇しました。MyS...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

MySQLスローログクエリの詳細な説明

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

Webデザインと制作のテスト問題と参考回答

<br />Web デザインと制作テスト パート I 多肢選択問題 1. 単一選択問題 ...

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)コアビジネスの MapReduce プログラムを実行する前に、まずデー...

Vue の vue.$set() メソッドのソースコード例の詳細な説明

Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオ...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

独自の YUM リポジトリを作成する手順

簡単に言うと、ウェアハウスとして使用される仮想マシンの IP は 192.168.149.129 で...