Skip to main content

索引分类

David LiuAbout 2 min

索引分类

按「数据结构」分类

B+tree 索引、Hash 索引、Full-text 索引

  • BTree 索引:MySQL 里默认和最常用的索引类型。只有叶子节点存储 value,非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 B+Tree,但二者实现方式不一样(前面已经介绍了)。
  • Hash 哈希索引:类似键值对的形式,一次即可定位。
  • RTree 索引:一般不会使用,仅支持 geometry 数据类型,优势在于范围查找,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
  • Full-Text 全文索引:对文本的内容进行分词,进行搜索。目前只有 CHARVARCHARTEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。

按「应用维度」分类

截屏2022-07-28 21.28.51

  • 主键索引:加速查询 + 列值唯一(不可以有 NULL)+ 表中只有一个。
  • 普通索引:仅加速查询。
  • 唯一索引:加速查询 + 列值唯一(可以有 NULL)。
  • 覆盖索引:一个索引包含(或者说覆盖)所有需要查询的字段的值。
  • 联合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。
  • 全文索引:对文本的内容进行分词,进行搜索。目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。

按「物理存储」分类

截屏2022-07-28 21.31.43

  • 聚集索引:聚集索引叶子结点存一行的数据(行数据)

    • InnoDB 中主键索引就是聚集索引(MyISAM 中没有聚簇索引)
    • 如果不存在主键,则使用第一个 UNIQUE 索引作为聚集索引
    • 如果没有 UNIQUE,就隐藏生成一个 row id 作为聚集索引(隐藏字段)
  • 非聚簇索引:只存 id,查到 id 后到聚集索引中”回表查询“

    • 又称辅助索引、非聚集索引、二级索引

根据聚集索引查的效率最高,因为无需“回表”操作了