MySQL 复合索引是指包含多个数据列的索引,与之概念相对的是单列索引,仅包含一个数据列。复合索引可以提高查询效率,但是需要注意复合索引的使用方式。
复合索引的最左匹配原则
复合索引的使用遵循最左匹配原则,即只有左边的列匹配到,后面的列才能继续匹配。例如,如果有一个复合索引 (name,age)
,那么以下查询可以使用复合索引:
SELECT * FROM users WHERE name = 'John';
因为 name
列是复合索引的最左边的列,所以 MySQL 可以使用复合索引来直接定位到 John 的记录。
以下查询不能使用复合索引:
SELECT * FROM users WHERE age = 20;
因为 age
列不是复合索引的最左边的列,所以 MySQL 无法使用复合索引来定位到符合条件的记录。
复合索引的创建
在创建复合索引时,需要指定索引的列顺序。一般来说,应该将选择性较好的列放在最前面,选择性较差的列放在后面。选择性越好,表示数据分布越均匀,索引的效率越高。
例如,如果有一个表 users
,其中包含以下列:
id | name | age | gender
如果我们经常查询 name
和 age
列,那么可以创建一个如下的复合索引:
CREATE INDEX idx_name_age ON users (name, age);
这个复合索引将 name
列放在最前面,因为 name
列的选择性较好。