暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL回表查询和索引覆盖

后端Q 2023-06-02
64

MySQL回表查询和索引覆盖是两种不同的查询优化方式,它们的区别如下:

索引覆盖查询:只需要从索引中就能够获取到查询所需要的数据,不需要回表查询。这种查询方式可以减少磁盘IO和内存使用,提高查询速度和性能。

回表查询:在索引中没有找到查询所需要的数据,需要回到原始数据表中查找。这种查询方式需要进行额外的磁盘IO和内存使用,会降低查询速度和性能。

举个例子,假设我们有一个数据表user,其中包含id、name和age三个字段,其中id为主键。我们在name字段上建立了索引。如果我们执行以下两个查询语句:


-- 索引覆盖查询
SELECT name FROM user WHERE id = 100;
-- 回表查询
SELECT age FROM user WHERE id = 100;

对于第一个查询语句,MySQL可以直接从索引中获取到name字段的值,不需要回表查询,因此是索引覆盖查询。对于第二个查询语句,MySQL只能从索引中获取到id字段的值,还需要回到原始数据表中查找age字段的值,因此是回表查询。

需要注意的是,索引覆盖查询只适用于一些特定的查询场景,例如只查询某几个字段或者使用聚合函数(如SUM、COUNT等)的情况。而在其他查询场景下,需要查询的字段较多或者需要进行多表关联查询等复杂查询时,很难使用索引覆盖查询,此时可能需要进行回表查询。



文章转载自后端Q,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论