MySQL 索引回表

索引回表(Covering Index)是指当一个查询涉及到了查询表的非索引字段时,数据库需要回到表中查找对应的数据。这个过程需要访问两次数据:首先通过索引访问到索引记录,然后通过索引记录中的指针回到原表中查询记录。

下面给出一个详细的例子:

假设我们有一张表user,其中有两个字段id和name。我们在name字段上建立了一个普通索引。现在我们要查询id=1的用户的name字段。

查询语句为:

SELECT name FROM user WHERE id=1;

这个查询语句中id字段是索引字段,name字段不是索引字段。因此,查询会首先使用索引在id字段上定位到符合条件的记录,然后需要回到user表中查找对应的name值。这个过程需要访问两次数据:首先通过索引访问到索引记录,然后通过索引记录中的指针回到原表中查询记录。

如果我们没有在name字段上建立索引,那么这个查询就需要进行全表扫描,即访问整张表的每一行数据来查找符合条件的记录,性能会非常低下。而如果在name字段上建立了索引,虽然需要进行两次访问,但是因为索引中存储的是指向原表的指针,所以回表查询的数据量很小,性能会得到较大提升。