You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询MySQL默认索引类型及InnoDB存储引擎的索引类型分类

MySQL索引相关问题解答

1. MySQL的默认索引类型是什么?

其实MySQL并没有一个全局统一的“默认索引类型”,这个得看你用的存储引擎:

  • 对于咱们日常最常用的InnoDBMyISAM存储引擎来说,当你创建索引时如果不指定类型,默认都是B+树索引
  • 如果你用的是Memory(内存)引擎,默认的索引类型是哈希索引,但这个引擎一般用在临时表这类特殊场景,日常业务很少用到。

简单说,绝大多数业务场景下,你默认创建的索引都是B+树类型的。

2. InnoDB存储引擎的索引类型区分及优势

InnoDB里的索引是分两种情况的,不是所有索引都一样:

  • 主键索引(聚簇索引):InnoDB会自动把主键作为聚簇索引,它的叶子节点直接存储整行数据。如果表没有显式定义主键,InnoDB会自动选一个唯一非空索引来当聚簇索引;如果连这个都没有,就会生成一个隐藏的row_id来作为聚簇索引的键。
  • 二级索引(非聚簇索引):除了主键索引之外的其他索引(比如普通索引、唯一索引、联合索引)都属于非聚簇索引,它们的叶子节点存储的是主键值,而不是整行数据。

这种设计的优势在哪里?

  • 主键查询效率极高:通过主键查询时,直接从聚簇索引的叶子节点就能拿到整行数据,不需要额外的“回表”操作,速度非常快。
  • 范围查询性能好:因为聚簇索引的物理数据是按照主键顺序存储的,所以像WHERE id BETWEEN 100 AND 200或者ORDER BY id这类范围/排序操作,不需要额外排序,直接按物理顺序读取数据就行,效率很高。
  • 二级索引占用空间更小:二级索引只存主键值,相比存整行数据,占用的磁盘/内存空间更少,能缓存更多的索引数据,间接提升查询性能。

内容的提问来源于stack exchange,提问作者DuZhentong

火山引擎 最新活动