2017-01-12 7 views
0

私はマルチカラムインデックス(名前、タイプ)を持つテーブルを持っています。 複数のcoulmnインデックス(名前、タイプ)は、オペレータのwhere句に役立ちますか?

Select * 
from [table_name] a 
where a.name = '[some_name]' and (a.type = '1' or a.type = '2' or a.type = '3') 

はのは、テーブルのレコードの数百万人

+2

[EXPLAIN'](http://dev.mysql.com/doc/refman/5.7/en/using-explain.html)を使って、この質問にあなた自身で答えることができます。 –

答えて

0

インデックスは参考になりますを持っているとしましょう、インデックスが

Select * 
from [table_name] a 
where a.name = '[some_name]' and a.type in ('1','2','3') 

ようなクエリのために参考になるかのようなクエリを持っている方が良いだろう、 最も可能性が高い。私はおそらく、name列の性質に依存していると言います。数百万行がありますが、の可能な値がわずかである場合(条件が低いselectivity)、索引はあまり役に立たないかもしれませんが、そうは思わしくありません。

INまたは=ORを使用するかどうかは関係なく、クエリプランは同じになるはずです。

0

大きな要因はSELECT *です。あなたのWHERE句がテーブルの80%を引き戻すならば、*を実行するためにテーブルが必要になるので、索引を使ってルックアップを実行するのではなく、テーブル全体をスキャンする方がクエリが速くなるかもしれません。

限定数の列のみを選択し、その中のすべての列が索引内に存在する場合は、索引のみを読取り、表は読取りする必要がありません。

関連する問題