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) );
以上创建的其实是一个多列索引,创建列索引的代码如下: 复制代码 代码如下: 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), INDEX_2 name (first_name) );
一个多列索引可以认为是包含通过合并(concatenate)索引列值创建的值的一个排序数组。 当查询语句的条件中包含last_name 和 first_name时,例如: 复制代码 代码如下: SELECT * FROM test WHERE last_name="Kun" AND first_name="Li";
但是多列索引的利用也是需要条件的,以下形式的查询语句能够利用上多列索引: 复制代码 代码如下: 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";
以下形式的查询语句利用不上多列索引: 复制代码 代码如下: SELECT * FROM test WHERE first_name="Michael"; SELECT * FROM test WHERE last_name="Widenius" OR first_name="Michael";