跳转至

索引

1.简介

索引是以一个表的属性的子集,用不同的方式组织tuple以保证访问这部分子集数据时的高效性。

通俗的来说,索引就是表的一份目录副本。当内容更新的时候,索引也应该同步更新。通过对不同的属性建立索引,从而提高在访问这部分属性时的高效性。

索引的开销来自于

  • 额外的存储
  • 写入和删除时的维护索引成本

2.聚簇索引和非聚簇索引

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。

一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引(理由:数据一旦存储,顺序只能有一种)。

  • 聚簇索引:将实际数据与索引放到了一块,找到索引也就找到了数据
  • 非聚簇索引:存储的数据实际是一个指向实际数据的指针。如MySQL的回表机制,在非聚簇索引中找到的指针对应了聚簇索引中的位置,然后再去聚簇索引中获取真正的数据。

B+树是聚簇索引的一种。

同时,虽然数据库被认为是无序的tuple集合,但是tuple在底层是默认使用索引存储的,在MySQL中默认使用B+树存储。

这是因为,如果按照无序的方式存储tuple,那么即使一个简单的增删改查,也可能需要对全表进行一次顺序扫描在以找到对应的tuple。