経験則として、複数列のインデックスでは、カーディナリティが最も高い列、つまり、個別の値の数が最も多い列をインデックスの最初に配置する必要があります。
より正確に言うと、最初に検索条件に一致する可能性が最も少ない列が必要です。これにより、結果セットを可能な限り絞り込むことができますが、一般的には、カーディナリティが最も高い列と同じです。
したがって、この例では、数百万の異なる値を持つ列を、6つの異なる値しかない列の前にインデックスに含める必要があります。
数百万の値から1つの行のみを選択すると仮定すると、より多くの行をより速く削除できます。
同様のカーディナリティの2つの列を検討するときは、小さい方の列を最初に配置します(INTEGER
VARCHAR
の前の列 列)MySQLはそれらをより速く比較および反復できるためです。
注意点の1つは、範囲を使用して選択する場合(WHERE datecol > NOW()
)、次に、範囲列を最も右側に配置し、列に単一の定数を設定します(例:WHERE id = 1
) 左の方です。これは、インデックスは最初の範囲値のポイントまでの検索と順序付けにのみ使用できるためです。