次のクエリがあるとしましょう:
SELECT * FROM table WHERE id = 1 ORDER BY name
複数列のインデックス(IDと名前)を追加するか、名前に個別のインデックスを追加する方がよいですか?
次のクエリがあるとしましょう:
SELECT * FROM table WHERE id = 1 ORDER BY name
複数列のインデックス(IDと名前)を追加するか、名前に個別のインデックスを追加する方がよいですか?
これは、のカーディナリティによって異なりid
ます。カーディナリティが高い場合(つまり、同じ値を共有する行が少ない場合id
)、インデックスを付けるid
ことをお勧めします。データベースはid
、ベーステーブルで一致するいくつかの行を検索して検索します。
テーブルの半分が同じid
である場合、クエリはインデックススキャンになります。*
を使用しているため、テーブル内のすべての列が含まれていない限り、複数列のインデックスは使用されないことに注意してください。したがって、これは、で並べ替えられたすべての列を含むインデックスでのみ高速化できます(name)
。
結局のところ、特定のパフォーマンスの問題が発生するまで、インデックスをまったく作成しないのが最善の場合がよくあります。詳細により、提案されたインデックスが機能するかどうかをテストおよび測定できます。これは、ほとんどの場合、適切なインデックスを推測するよりも優れています。