MySQL 联合索引(持续更新)

Timeline

基础知识(2025-12-17)

联合索引,又叫多列索引,是一种可以包含多个列的索引技术,使用得当,可以提升过滤和排序执行效率。

最多可包含 16 个字段

创建联合索引示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-- 建表,同时创建联合索引
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(64) NOT NULL,
    gender SMALLINT DEFAULT 0,
    grade VARCHAR(16) NOT NULL,
    -- 此处
    INDEX idx_name_grade (name, grade)
);

-- 表建完后,新建索引
CREATE INDEX idx_name_grade ON students (name, grade);

新建唯一联合索引,则加上 UNIQUE 关键字,如:

  • UNIQUE INDEX idx_name_grade (name, grade)
  • CREATE UNIQUE INDEX idx_name_grade ON students (name, grade)

重点:

  • 应用最左匹配原则:对 (name)、(name, grade) 有效,但对 (grade, name) 无效
    • 主流数据库优化器会对条件进行重排,所以条件顺序不影响命中索引
  • 联合索引 (name, grade) 和 (grade, name) 不同
  • 索引副作用:对 INSERT、UPDATE、DELETE 操作有额外开销
  • 应业务要求的过滤逻辑创建联合索引,若业务场景下,单个字段的查询更多,则创建单个索引