索引分类
January 3, 2023About 2 min
索引分类
按「数据结构」分类
B+tree 索引、Hash 索引、Full-text 索引。
- BTree 索引:MySQL 里默认和最常用的索引类型。只有叶子节点存储 value,非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 B+Tree,但二者实现方式不一样(前面已经介绍了)。
- Hash 哈希索引:类似键值对的形式,一次即可定位。一般使用 Redis代替
- RTree 索引:一般不会使用,仅支持 geometry 数据类型,优势在于范围查找,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
- Full-Text 全文索引:对文本的内容进行分词,进行搜索。目前只有
CHAR
、VARCHAR
,TEXT
列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
按「应用维度」分类
- 主键索引:加速查询 + 列值唯一(不可以有 NULL)+ 表中只有一个。
- 普通索引:仅加速查询。
- 唯一索引:加速查询 + 列值唯一(可以有 NULL)。
- 覆盖索引:一个索引包含(或者说覆盖)所有需要查询的字段的值。
- 联合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。
- 全文索引:对文本的内容进行分词,进行搜索。目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
按「物理存储」分类
聚集索引:聚集索引叶子结点存一行的数据(行数据)
- InnoDB 中主键索引就是聚集索引(MyISAM 中没有聚簇索引)
- 如果不存在主键,则使用第一个 UNIQUE 索引作为聚集索引
- 如果没有 UNIQUE,就隐藏生成一个 row id 作为聚集索引(隐藏字段)
非聚簇索引:只存 id,查到 id 后到聚集索引中”回表查询“
- 又称辅助索引、非聚集索引、二级索引
根据聚集索引查的效率最高,因为无需“回表”操作