2017-08-01 14 views
0

インデックスが正しく使用されている場合をよりよく理解するために、私は可能なケースを列挙したいと思います。postgres:インデックスが使用されている場合

"a"、 "b"、 "c"、 "d"列の表があるとします。

我々は(A、B、C、D)にインデックスを作成:

create index my_index on table my_table (a, b, c, d) 

は、それが使用さの場合:

1)

where a=% and b=% and c=% and d=% 

2)

where a=% and b=% 

3)

where a=% 

4)

where b=% and c=% and d=% 

5)

where c=% order by b 

6)

where a=% and b=% and c=% order by case when d is not null then d else c end 

7) のは、今、我々はより7ポイントの列が、インデックスを持っていると仮定しましょうオンのみ(a、b、c、d)

where a=% and b=% and c=% and d=% and e=% and f=% and g=% 

答えて

3

MySQLは多列インデックスを説明するかなり良いdocumentationです。ルールは基本的にデータベース間で同じです(ただし、いくつかの高度な機能があります)。

もちろん、from句で何が起こっているか、選択されている列、テーブルに関する統計情報などもあります。

1)限り、すべての条件が平等いるようwhere a=% and b=% and c=% and d=%

はい、:

次は、基本的な指針です。照合の競合がどうなるか分かりません。

2)ここで、=%およびb =%限り、すべての条件が平等であるよう

はい。照合の競合がどうなるか分かりません。限り、すべての条件が平等であるよう

3)ここで、=%

はい。照合の競合がどうなるか分かりません。

4)ここで、b =%及びc =%およびd =%

おそらくありません。使用する場合は、索引をスキャンする必要があります。インデックスがクエリをカバーしている場合は、これが該当します。

5)ここで、c =%order by b

おそらくありません。

6)ここで、dは

where句に使用されるべき端C他次いでD nullでない場合によって=%およびb =%及びc =%のオーダー。ソートは引き続き必要です。

+1

また、値に2つの値しかなく、数%または数百万のレコードがあり、%=がインデックスの使用につながっていない場合は、値の分布にもよります。 @ ascherk。 – aschoerk

+0

。 。いい視点ね。私は答えを明らかにした。 –

+0

申し訳ありません、私は7)ケースの編集を追加しました – 91DarioDev

関連する問題