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

面试题:MySQL聚集索引和非聚集索引的区别

鲸鱼手记 2021-09-03
1613
聚集索引和非聚集索引的区别

以MySQL的InnoDB存储引擎为例,可以有如下解释:

每个索引上包含的字段会有不同,聚集索引包含所有字段,非聚集索引只包含索引字段+主键字段,所以如果在使用非聚集索引后还需要使用其他字段的(包括在where条件中或者select子句中),则需要通过主键索引回表到聚集索引获取其他字段。如果是非聚集索引可以满足SQL语句的所有字段的,则被称为全覆盖索引,没有回表开销。

回表是一个通过主键字段重新查询聚集索引的过程,所以如果在大量记录需要回表的情况下,查询成本会比直接在聚集索引上范围扫描的成本还大。所以对于一些情况,不使用非聚集索引效率反而更高。

为什么要限定是InnoDB存储引擎呢?因为MyISAM存储引擎数据文件和索引文件是分离的,不存在聚集索引的概念。


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

评论