搞懂MySQL聚簇索引和非聚簇索引以及回表查询

82 阅读2分钟

解释这些之前我们先了解索引以及用处

索引

MySQL的索引的底层数据结构使用的是B+树

MySQL索引是一种用于加快数据库查询操作的数据结构。它类似于图书馆中的目录,通过存储某些字段的值和对应的记录位置,帮助数据库系统快速定位和检索数据。

当你在MySQL数据库表中创建索引时,MySQL会根据指定的字段或字段组合创建一个索引数据结构。这个索引会根据索引字段的值建立一个映射,使得当你查询或筛选这些字段时,数据库可以快速地找到匹配的记录,而不必遍历整个表。 举个例子,假设你有一个包含学生信息的数据库表,其中包含学生的ID、姓名、年龄、成绩等字段。如果你经常需要按照学生的ID进行查询,你可以为ID字段创建一个索引。这样,当你根据学生的ID进行查询时,数据库可以直接使用索引来快速找到对应的学生记录,而不必逐条扫描整个表。

索引的使用能显著提高数据库查询的性能,尤其在大型数据表中或者对经常进行查询的字段上。然而,索引并不是越多越好。索引也会占用额外的存储空间,并在插入、更新和删除数据时增加数据库的维护成本。因此,需要根据实际需求和查询模式来选择创建哪些字段的索引。 常见的索引类型包括聚簇索引、非聚簇索引、唯一索引、全文索引等。每种索引类型都有其适用的场景和使用限制,合理的索引设计是优化数据库性能的重要因素之一。

聚簇索引和非聚簇索引对比

通过以上我们可知聚簇索引一般就是主键索引,非聚簇索引(如二级索引)可能是表中的其他字段。

假设有如下表结构和数据

学号ID(主键)名字
1Jack1
2Jack2
3Jack3

主键为聚簇索引,其他字段(如名字或者班级)为非聚簇索引

回表查询

回表查询是在数据库中使用非聚簇索引进行查询时,由于索引不能直接包含所有需要的数据,因此还需要通过索引中的值去主表中再次查找相应的数据的过程。

以上图数据表举例

select * from table where name='Tim'

此时通过二级索引查询到Tim的主键ID索引,再回表到聚簇索引中查询数据。这就是回表查询