| ||||||||||||||||
![]() | ||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||
![]() |
![]() |
|||||||||||||||
![]() | ||||||||||||||||
![]() |
Up | Previous | Next | Contents |
MySQL can create indexes on multiple columns. An index may consist of up to 15 columns. (On CHAR
and VARCHAR
columns you can also use a prefix of the column as a part of an index).
A multiple-column index can be considered a sorted array containing values that are created by concatenating the values of the indexed columns.
MySQL uses multiple-column indexes in such a way that queries are fast when you specify a known quantity for the first column of the index in a WHERE
clause, even if you don't specify values for the other columns.
Suppose a table is created using the following specification:
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));
Then the index name
is an index over last_name
and first_name
. The index will be used for queries that specify values in a known range for last_name
, or for both last_name
and first_name
. Therefore, the name
index will be used in the following queries:
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";
However, the name
index will NOT be used in the following queries:
mysql> SELECT * FROM test WHERE first_name="Michael"; mysql> SELECT * FROM test WHERE last_name="Widenius" OR first_name="Michael";
For more information on the manner in which MySQL uses indexes to improve query performance, see section 12.4 How MySQL uses indexes.
Name | Comment |
Up | Previous | Next | Contents |
![]() | ||||||
![]() |
![]() |
|||||
![]() | ||||||
![]() |
||||||