二级索引也叫辅助索引、非聚簇索引是建立在主键索引之外的索引。假设有一张用户表CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR(50), age INT );如果创建CREATE INDEX idx_name ON users(name);那么idx_name就是二级索引。二级索引存放什么在 InnoDB 中二级索引的叶子节点通常存放索引字段值 主键值大致结构如下name Tom → id 1001 name Jack → id 1002它通常不直接保存完整的一行数据。查询过程执行SELECT * FROM users WHERE name Tom;查询过程是二级索引 idx_name ↓ 找到 name Tom 对应的主键 id ↓ 回到主键索引中查找完整数据 ↓ 得到整行记录这个过程叫做回表。二级索引的作用1. 加快非主键字段查询如果没有idx_name数据库可能需要扫描整张表逐行检查 name 是否等于 Tom有二级索引后可以快速定位符合条件的记录。2. 支持排序和范围查询例如SELECT * FROM users WHERE age BETWEEN 20 AND 30 ORDER BY age;建立CREATE INDEX idx_age ON users(age);后数据库可以利用索引快速定位范围并按索引顺序扫描。3. 加快关联查询例如SELECT * FROM orders WHERE user_id 1001;给orders.user_id建立二级索引可以提高根据用户查订单的效率也有利于表连接操作。4. 实现覆盖索引避免回表如果查询需要的字段都在二级索引中CREATE INDEX idx_name_age ON users(name, age); SELECT name, age FROM users WHERE name Tom;二级索引中已经包含name和age数据库可以直接从索引返回结果不需要再查询主键索引。这叫覆盖索引。二级索引和主键索引的区别对比项主键索引二级索引一张表数量通常只能有一个可以有多个是否要求唯一必须唯一、不能为 NULL普通二级索引不要求叶子节点保存完整行数据保存索引列和主键值查询后是否可能回表通常不需要可能需要主要用途唯一标识和定位记录加速其他字段的查询一句话总结二级索引就是为非主键字段建立的 B 树目录用来快速找到对应的主键再通过主键索引获取完整记录。