索引概览

78 阅读2分钟

概览

索引的价值是帮我们从海量数据中找到想要的数据,如果数据量少,那么是否使用索引对结果的影响并不大。

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

索引的种类

从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引和全文索引。

  • 普通索引是基础的索引,没有任何约束,主要用于提高查询效率。
  • 唯一索引就是在普通索引的基础上增加了数据唯一性的约束,在一张数据表里可以有多个唯一索引。
  • 主键索引在唯一索引的基础上增加了不为空的约束,也就是 NOT NULL+UNIQUE,一张表里最多只有一个主键索引。
  • 全文索引用的不多,MySQL 自带的全文索引只支持英文。

按照物理实现方式,索引可以分为 2 种:聚集索引和非聚集索引。我们也把非聚集索引称为二级索引或者辅助索引。

  • 聚集索引,可以按照主键来排序存储数据,直接通过索引查找数据。
  • 非聚集索引,索引项是按顺序存储的,但索引指向得内容是随机存储的。第一次先找索引,然后根据索引找数据。只维护索引,不维护索引指向的数据。

每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。

聚集索引与非聚集索引的原理不同,在使用上也有一些区别:

  • 聚集索引的叶子节点存储的就是我们的数据记录,非聚集索引的叶子节点存储的是数据位置。非聚集索引不会影响数据表的物理存储顺序。
  • 一个表只能有一个聚集索引,因为只能有一种排序存储的方式,但可以有多个非聚集索引,也就是多个索引目录提供数据检索。
  • 使用聚集索引的时候,数据的查询效率高,但如果对数据进行插入,删除,更新等操作,效率会比非聚集索引低。

联合索引存在最左匹配原则,也就是按照最左优先的方式进行索引的匹配。


此文章为4月Day16学习笔记,内容来源于极客时间《SQL必知必会》