数据库中索引类型详解:
聚簇索引、非聚簇索引、回表、覆盖索引
聚簇索引:
概念和原理:聚簇索引是将数据存储与索引放在一起,数据行的物理顺序与索引的逻辑顺序一致。换句话说,聚簇索引决定了表中数据的物理存储顺序。
特点:一个表只能有一个聚簇索引且必须要有,通常是主键索引。B+树的叶子结点中有整行的数据。(B+树在MySQL索引和数据结构解释说明-优快云博客有介绍)
举例说明:假设有一张学生信息表,其中的学号是主键,并且创建了以学号为聚簇索引。那么根据学号的顺序会直接影响数据在磁盘上的存储顺序。在查询时根据聚簇索引一次就可以查出整行数据。
非聚簇索引:
概念和原理:非聚簇索引的索引和数据存储是分开的,索引保存了指向实际数据行的指针。
特点:一个表可以有多个非聚簇索引,适用于频繁更新的列或需要覆盖查询的列。
举例说明:在上述的学生信息表中,可能还有一个按照姓名的非聚簇索引,这样在通过姓名进行查询时,首先通过索引找到对应的指针,然后再根据指针找到具体的数据行。也就产生了回表。
回表:
概念和原理:当使用非聚簇索引进行查询时,需要通过索引找到指针,再根据指针查找数据行的过程称为回表。
特点:影响查询性能的因素之一,增加了额外的IO操作。
覆盖索引:
概念和原理:如果一个查询的字段包含在索引中的所有列,那么这个索引就是覆盖索引,可以避免回表操作。
特点:提高查询性能,减少IO操作,适用于查询需要的字段都包含在索引中的情况。
举例说明:如果在学生信息表中,除了学号的聚簇索引外,还建立了包含学号和姓名的联合索引,那么当查询学号和姓名时,可以直接使用该索引进行查询,而无需回表操作。