4

次のクエリがあるとしましょう:

SELECT * FROM table WHERE id = 1 ORDER BY name

複数列のインデックス(IDと名前)を追加するか、名前に個別のインデックスを追加する方がよいですか?

4

1 に答える 1

3

これは、のカーディナリティによって異なりidます。カーディナリティが高い場合(つまり、同じ値を共有する行が少ない場合id)、インデックスを付けるidことをお勧めします。データベースはid、ベーステーブルで一致するいくつかの行を検索して検索します。

テーブルの半分が同じidである場合、クエリはインデックススキャンになります。*を使用しているため、テーブル内のすべての列が含まれていない限り、複数列のインデックスは使用されないことに注意してください。したがって、これは、で並べ替えられたすべての列を含むインデックスでのみ高速化できます(name)

結局のところ、特定のパフォーマンスの問題が発生するまで、インデックスをまったく作成しないのが最善の場合がよくあります。詳細により、提案されたインデックスが機能するかどうかをテストおよび測定できます。これは、ほとんどの場合、適切なインデックスを推測するよりも優れています。

于 2012-07-25T20:14:20.070 に答える