415 字
2 分钟
MySQL索引类型有哪些

MySQL 索引类型有哪些#

按数据结构分#

分为

  • B-Tree 索引
  • Hash 索引
  • Full-text 索引

创建表的时候,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引:

  • 有主键:会使用主键作为聚簇索引的索引键
  • 没有主键: 选择第一个不包含 NULL 值的唯一列作为聚簇索引的索引键
  • 上面两个都没有的情况下,InnoDB 会自动生成一个隐式自增 id 列作为聚簇索引的索引键。

其他索引都属于辅助索引,也就是非聚簇索引或者二级索引。

按物理存储分#

分为

  • 聚簇索引(主键索引)
  • 二级索引(辅助索引)

按字段特性分#

  • 主键索引
  • 唯一索引
  • 普通索引
  • 前缀索引

主键索引是唯一的,且不允许为 NULL。每个表只能有一个主键索引。

按字段个数分#

  • 单列索引
  • 联合索引

按数据结构分#

  • B+树索引
  • 哈希索引
  • 倒排索引(Full-text 索引)
  • R-树索引 (多维树空间)

从 InnoDB b+树索引来看,分为聚簇索引和非聚簇索引 聚簇索引也就是主键索引,叶子节点存储整行的数据,非叶子节点存储主键值和指向子节点的指针。 非聚簇索引叶子节点存储主键,非叶子节点存储主键值和指向子节点的指针。 因此,非聚簇索引查询需要回表查询

从索引性质看#

有 普通索引 主键索引 唯一索引 联合索引 全文索引 空间索引