mysql索引 | 青训营笔记

77 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

索引的优点

  1. 建立索引可以有效缩短数据的检索时间
  2. 建立索引可以加快表与表之间的连接
  3. 为用来排序或者是分组的字段添加索引可以加快分组和排序

索引的缺点

  1. 创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大
  2. 创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大
  3. 会降低表的增删改的效率,因为每次增删改都需要对索引进行动态维护,导致时间变长

索引建立的原则

  1. 数据量大的,经常进行查询操作的表要建立索引。
  2. 用于排序的字段可以添加索引,用于分组的字段也可以添加索引。
  3. 表与表连接用于多表联合查询的约束条件的字段应当建立索引。

聚簇索引

聚簇索引即索引结构和数据一起存放的索引,并不是一种单独的索引类型。InnoDB 中的主键索引就属于聚簇索引。 非聚簇索引的B+树结构基本和聚簇索引一致,只是非聚簇索引的数据是单独存储的,所以在叶子结点只存了定位数据的指针。

聚簇索引的优点

  1. 查询速度非常快 :聚簇索引的查询速度非常的快,因为整个 B+树本身就是一颗多叉平衡树,叶子节点也都是有序的,定位到索引的节点,就相当于定位到了数据。相比于非聚簇索引, 聚簇索引少了一次读取数据的 IO 操作。
  2. 对排序查找和范围查找优化 :聚簇索引对于主键的排序查找和范围查找速度非常快。

聚簇索引的缺点

  1. 依赖于有序的数据 :因为 B+树是多路平衡树,如果索引的数据不是有序的,那么就需要在插入时排序,如果数据是整型还好,否则类似于字符串或 UUID 这种又长又难比较的数据,插入或查找的速度比较慢。(索引的缺点)
  2. 更新代价大 : 如果对索引列的数据被修改时,那么对应的索引也将会被修改,而且聚簇索引的叶子节点还存放着数据,修改代价是较大的,所以对于主键索引来说,主键一般都是不可被修改的。