MySQL の場合、インデックス内のすべての列をテストするクエリ、または最初の列のみ、最初の 2 つの列、最初の 3 つの列などをテストするクエリに複数列のインデックスを使用できます。
インデックス定義で列を正しい順序で指定すると、単一の複合インデックスで同じテーブルに対する複数の種類のクエリを高速化できます。
INDEX nameIdx (last_name,first_name)
テーブルテストで作成したとしましょう
したがって、nameIdxインデックスは、次のクエリでのルックアップに使用されます。
SELECT * FROM test WHERE last_name='Widenius';
SELECT * FROM test
WHERE last_name='Widenius' AND first_name='Michael';
SELECT * FROM test
WHERE last_name='Widenius'
AND (first_name='Michael' OR first_name='Monty');
nameIdxという名前は、次のクエリのルックアップには使用されません。
SELECT * FROM test WHERE first_name='Michael';
SELECT * FROM test
WHERE last_name='Widenius' OR first_name='Michael';
詳しくはURL参照
これの要約は、インデックス順(左から右)で述べたようにwhere句で列を使用している場合、単一列インデックスよりも優れています