MySQLでは複数のカラムに対するインデックスを作成できます。インデックスは最大 16 カラムで構成できます。.特定のデータ型に関しては、カラムのプリフィックスをインデックス上で検索することができます。(項6.4.3. 「カラムインデックス」を参照してください)
複数カラムのインデックス(複合インデックス)は、インデックス化されたカラムの値を連結することによって生成された値が含まれ、ソート化された配列と見なすことができます。
MySQL
では、WHERE節内でインデックスの第
1
カラムを指定する場合、他のカラムの値を指定しなくても、クエリが高速化できるように複合インデックスが使用されます。
次のようなテーブルが定義されているとします。
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
ここで、インデックス
nameは、last_nameと
first_name
に対するインデックスです。このインデックスは、last_name
の範囲、または last_name と
first_nameの両方の範囲の値を指定するクエリに使用できます。
したがって、nameインデックスは次のようなクエリに使用されます。
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'); SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';
しかし、次のクエリには
nameインデックスが使用されません。
SELECT * FROM test WHERE first_name='Michael'; SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';
MySQL でインデックスを使用してクエリパフォーマンスを改善する方法の詳細については、項6.4.5. 「MySQLにおけるインデックスの使用」を参照してください。
