索引是万能的吗?

在有些情况下使用索引反而会让效率变低:

  • 在数据表中的数据行数比较少的情况下,比如不到 1000 行,是不需要创建索引的。
  • 当数据重复度大,比如高于 10% 的时候,也不需要对这个字段使用索引。

索引的种类有哪些?

从功能逻辑上说,索引主要有 4 种,分别是:

  • 普通索引: 是基础的索引,没有任何约束,主要用于提高查询效率。
  • 唯一索引: 是在普通索引的基础上增加了数据唯一性的约束,在一张数据表里可以有多个唯一索引。
  • 主键索引: 在唯一索引的基础上增加了不为空的约束,也就是 NOT NULL+UNIQUE,一张表里最多只有一个主键索引。
  • 全文索引: 用的不多,MySQL 自带的全文索引只支持英文。我们通常可以采用专门的全文搜索引擎,比如 ES(ElasticSearch) 和 Solr。

在一张数据表中只能有一个主键索引,这是由主键索引的物理实现方式决定的,因为数据存储在文件中只能按照一种顺序进行存储。但可以有多个普通索引或者多个唯一索引。

按照物理实现方式,索引可以分为 2 种:

  • 聚集索引
  • 非聚集索引。我们也把非聚集索引称为二级索引或者辅助索引。

按照字段个数进行划分:

  • 单一索引
  • 联合索引

总结

image.png