28 什么是联合索引 / 组合索引 / 复合索引?
本质是相同的,一个索引中包含多个列
CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
age INT,
INDEX idx_name_email_age (name, email, age)
);
idx_name_email_age 就是一个联合索引
联合索引的匹配原则:最左前缀原则(Leftmost Prefix Rule)
支持以查询
select * from user where name = 'A';
select * from user where name = 'A' and email = 'B';
select * from user where name = 'A' and email = 'B' and age = 30;
不支持索引
select * from user where email = 'B'; -- 跳过 name,不能命中
select * from user where age = 30; -- 跳过 name, email 也不能命中
⚠️ 注意事项 Caution:
- 字段顺序非常重要(影响能否命中索引)
- 应优先放置区分度高的字段在前面
- 不要滥用联合索引,过多字段影响写入效率和索引大小。
29 复合索引字段顺序影响使用效果吗?
字段顺序不同,索引命中规则和使用的效率完全不同
最左前缀匹配(Leftmost Prefix Matching)
- 索引会优先匹配从最左边开始连续的字段。
- 一旦某个字段“断裂”或“跳过”,后面的字段将无法继续利用索引。