[MySQL 面试题]-索引 28-29 什么是联合索引 / 组合索引 / 复合索引?

59 阅读1分钟

image.png

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:

  1. 字段顺序非常重要(影响能否命中索引)
  2. 应优先放置区分度高的字段在前面
  3. 不要滥用联合索引,过多字段影响写入效率和索引大小。

29 复合索引字段顺序影响使用效果吗?

字段顺序不同,索引命中规则和使用的效率完全不同

最左前缀匹配(Leftmost Prefix Matching)

  • 索引会优先匹配从最左边开始连续的字段。
  • 一旦某个字段“断裂”或“跳过”,后面的字段将无法继续利用索引。