2009-12-03 16 views
15

単なる簡単な質問ですが、インデックスの順序は複数の列にまたがっても関係ありませんか?私のインデックスは次のように作成された場合複数の列のインデックスの順序

 
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 

私はこのようなクエリのためにインデックスを追加したい場合は、それは問題ではない:

 
CREATE INDEX my_index 
ON my_table (column_1, column_2) 

またはクエリを取っ例えば

、このように:

 
CREATE INDEX my_index 
ON my_table (column_2, column_1) 

ありがとうございます!

答えて

21

この例では、列の順序は関係ありません。

ご注文の際には問題ありません。 (col1,col2)のインデックスはORDER BY col1, col2には使用できますが、ORDER BY col2, col1には使用できません。

WHERE句の場合、(col1, col2)のインデックスはWHERE col1 = 1 AND col2 = 1で動作します。 WHERE col1 = 1でも動作します。しかし、それはWHERE col2 = 1で助けることはできません。

+4

実際、この場合でも問題になる可能性があります。ほぼすべての行にcol1 = 1が指定されている場合、col2が最初のものであれば、索引はうまく機能します。 –

+3

1つの列が他の列よりも著しく高いelisctivityを持っている場合、提供された例でも問題になる可能性があります。高い選択性(多くの異なる値)を持つ列を先に配置します。 – Manu

+0

システム上ですでに利用可能なインデックスをヒットする方法を理解するのに役立つこの回答の優れた情報。 – Swoop

0

最高の方法は、測定することです。 1つを試して、パフォーマンスを測定してから、そのインデックスを削除し、もう一方を試してみてください。通常は、一緒に照会されたデータがディスク上のインデックスに接近して存在するようにし、インデックス内の列の順序は、インデックスがディスクに格納される方法と異なります。どのような組み合わせの索引が最適に機能するかを正確に推測するのは非常に難しいので、いくつかの可能性を試して、どれがあなたのデータに最適かを判断してください。

関連する問題