mysqlの多基準にのみ使用されるインデックスを問い合わせるのはなぜ?

あなただけのインデックスデータベースクエリのレコードを使用することができますか?

 

インターネット上でいくつかの記事を見て、私は言葉より数回を見つけました:

あなたは、多くの場合、フィールドやクエリの両方に必要がある場合は、インデックス自体は二つのフィールドに対応するので、2つのデータベースは唯一の複合インデックスを使用しながら、それらのいずれかを使用することができますので、その後、複合インデックスを確立するために2つの別々のインデックスの使用が劣る、別のインデックスは、通常、効率が大幅に改善されるであろう。

しかし、多くの場合、それはなぜ言いませんでしたか?以下の質問を知りたい:
1、どのような場合には、インデックスを使用するデータベース・クエリだけではないのですか?
2.そうでない場合、どのような状況下でのみインデックスを使用しますか?
3は、それぞれ、それはそれの上記のクエリのインデックスの使用を原因は何ですか?


 

それほど「データベースクエリは、唯一のインデックスを使用することができます」と、全表スキャン/インデックスのみバイナリツリーは2つのインデックスを分析するために、速くよりも使用することはなく、より多くの時間がかかり、その例データベースの大半インデックスを持つはい。
この文のように:

select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar' 

:私たちは、N索引データベースとクエリがある場合は、それぞれ自分の状況を費やす必要があることを想像
ここでの主なバイナリツリーを意味する[クエリオプティマイザは、(白の言葉で実行計画を生成し、何かである)マスターが見つけバイナリN倍にする必要がありますここでの処理を見つけるために、最も外側のinode]であるとして考えられる次の
単離COLUMN1最初のバイナリ値が1つのマスタに等しく、そして次に単離し第二主COLUMN2バイナリ値fooへの電流ラインcoumn1に等しくなければなりません図1に示すように、メインバーの最後の列と等しいFOOでなければならない二進ツリーの値が1 COLUMN1とCOLUMN2に等しくなければならない見つけます。
このようなプロセスは再びそれを実行するためのクエリオプティマイザであれば、さえも死ぬハーフライフ、クエリオプティマイザは、再び上記の計画を実行するために待つことができない、貪欲アルゴリズム(最近傍アルゴリズム)が起こることを許可することができるので、ときの場合インデックスが(カラム1)最初にフィルターカラムを使用している限り、データベースは、あなたがテーブルスキャンに直接移動します次のステートメント。

SELECT COUNT(1)TABLE1からCOLUMN1 = 1とCOLUMN2 = 'foo' とCOLUMN3 = 'bar' に

そうではないので、多くのデータベースが1つのつのみのインデックスを使用してクエリをサポートし、唯一のインデックスを使用するよりも遅くusingステートメントを消費しながらN個の独立したインデックスを言って良いだろう。
その頭の上したがって、トップ指数(COLUMN1、COLUMN2、COLUMN3)この組合せのインデックスを使用して上記の記事の場合に、このインデックスを組み合わせることができる利点のB +ツリー構造:
クエリにメインバイナリツリー(カラム= 1)、カラム=現在のノードに基づいて1つのノード2つのバイナリCOLUMN2 = FOOクエリの後、3バイナリCOLUMN3 =バーを見つける二COLUMN2 = FOOバイナリツリーにクエリ。

 
出典ます。https://segmentfault.com/q/1010000003880137

おすすめ

転載: www.cnblogs.com/technologykai/p/12576113.html