咨询MySQL默认索引类型及InnoDB存储引擎的索引类型分类
MySQL索引相关问题解答
1. MySQL的默认索引类型是什么?
其实MySQL并没有一个全局统一的“默认索引类型”,这个得看你用的存储引擎:
- 对于咱们日常最常用的InnoDB和MyISAM存储引擎来说,当你创建索引时如果不指定类型,默认都是B+树索引。
- 如果你用的是Memory(内存)引擎,默认的索引类型是哈希索引,但这个引擎一般用在临时表这类特殊场景,日常业务很少用到。
简单说,绝大多数业务场景下,你默认创建的索引都是B+树类型的。
2. InnoDB存储引擎的索引类型区分及优势
InnoDB里的索引是分两种情况的,不是所有索引都一样:
- 主键索引(聚簇索引):InnoDB会自动把主键作为聚簇索引,它的叶子节点直接存储整行数据。如果表没有显式定义主键,InnoDB会自动选一个唯一非空索引来当聚簇索引;如果连这个都没有,就会生成一个隐藏的
row_id来作为聚簇索引的键。 - 二级索引(非聚簇索引):除了主键索引之外的其他索引(比如普通索引、唯一索引、联合索引)都属于非聚簇索引,它们的叶子节点存储的是主键值,而不是整行数据。
这种设计的优势在哪里?
- 主键查询效率极高:通过主键查询时,直接从聚簇索引的叶子节点就能拿到整行数据,不需要额外的“回表”操作,速度非常快。
- 范围查询性能好:因为聚簇索引的物理数据是按照主键顺序存储的,所以像
WHERE id BETWEEN 100 AND 200或者ORDER BY id这类范围/排序操作,不需要额外排序,直接按物理顺序读取数据就行,效率很高。 - 二级索引占用空间更小:二级索引只存主键值,相比存整行数据,占用的磁盘/内存空间更少,能缓存更多的索引数据,间接提升查询性能。
内容的提问来源于stack exchange,提问作者DuZhentong




