:: DEVELOPER ZONE
MySQL では複数のカラムに対するインデックスを作成できます。インデックスは最大 15 カラムで構成できます(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 でのインデックスの使用」を参照してください。
© 1995-2005 MySQL AB. All rights reserved.
