MySQL
では複数のカラムに対するインデックスを作成できます。インデックスは最大
16 カラムで構成できます(CHAR
および VARCHAR
カラムではカラムの先頭部分をインデックスの部分として使用することもできます)。
複数カラムのインデックス(複合インデックス)は、インデックス化されたカラムの値を連結することによって生成された値が含まれ、ソート化された配列と見なすことができます。
MySQL では、WHERE
節内でインデックスの第 1
カラムを指定する場合、他のカラムの値を指定しなくても、クエリが高速化できるように複合インデックスが使用されます。
次のようなテーブルが定義されているとします。
mysql>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
インデックスは次のようなクエリに使用されます。
mysql>SELECT * FROM test WHERE last_name="Widenius";
mysql>SELECT * FROM test WHERE last_name="Widenius"
->AND first_name="Michael";
mysql>SELECT * FROM test WHERE last_name="Widenius"
->AND (first_name="Michael" OR first_name="Monty");
mysql>SELECT * FROM test WHERE last_name="Widenius"
->AND first_name >="M" AND first_name < "N";
しかし、次のクエリには name
インデックスが使用されません。
mysql>SELECT * FROM test WHERE first_name="Michael";
mysql>SELECT * FROM test WHERE last_name="Widenius"
->OR first_name="Michael";
MySQL でインデックスを使用してクエリパフォーマンスを改善する方法の詳細については、項5.4.3. 「MySQL でのインデックスの使用」を参照してください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.