索引
“索引” 是 “存储引擎”用于快速找到记录的一种【数据结构】。
MYSQL中索引在存储引擎层实现,而非服务器层。
索引类型
- 聚簇索引 & 非聚簇索引(二级索引)
- 主键索引 & 辅助索引
- 复合索引
- 前缀索引
- 唯一索引
- 压缩索引
- 全文索引
- Hash索引
- 列索引
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- 全文索引
- 空间索引
聚簇
&非聚簇
, 关心的是 “数据” 和 “索引” 之间存储关系。
- 聚簇索引, 索引与数据放在一起。
- 非聚簇索引,索引与数据分别存放。
存储引擎 | 索引结构 | 索引类型(数据存放方式) | 备注 |
---|---|---|---|
InnoDB | B+Tree | 聚簇索引 | 叶节点存储的是数据 |
MyisAM | B+Tree | 非聚簇索引 | 叶节点存储的是数据地址 |
-
InnoDB 使用聚簇索引,将主键组织到一棵B+树中,而
数据
储存在叶节点上。
若使用 “where id = 14” 这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。 -
MyISM 使用非聚簇索引,非聚簇索引的两棵B+树没什么不同。
节点的结构完全一致只是存储的内容不同而已。
主键索引 B+树的节点存储了主键, 辅助键索引B+树存储了辅助键。
表数据存储在独立的地方。
这两颗B+树的叶子节点使用同一个表数据地址
,对于表数据来说,这两个键没有任何差别。
由于索引树是独立的,通过辅助键检索无需访问主键的索引树。
`聚集索引`概念:
- 一个表仅有一个聚簇索引
-
> `主索引` & `辅助索引`
> `主键索引` & `非主键索引` (不严格的说法)
按索引用途和角色,分`主索引`和`辅助索引`。
- 主索引,一般为主键索引,例如 id 列。
- 辅助索引, 一般为非主键索引,例如 name 列。
```comment
若对Name列进行条件搜索,则需要两个步骤:
- 第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。
- 第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。
-(重点在于通过其他键需要建立辅助索引)
存储引擎
存储引擎 | 支持索引 | 事务 | 备注 |
---|---|---|---|
Innodb | B+Tree(聚簇) | 支持 | |
MyisAM | B+Tree(非聚簇)、全文索引(FULLTEXT)、压缩索引 | No | |
Memory | Hash索引 | ||
NDB集群存储引擎 | B-Tree 索引 |
参考
- https://cloud.tencent.com/developer/article/1541265