加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server群集索引是否替换了RID查找“索引”

发布时间:2020-12-12 16:34:31 所属栏目:MsSql教程 来源:网络整理
导读:当SQL Server中的表具有聚簇索引时,是否意味着所有索引查询将通过聚簇索引进行? 例如,如果我有一个具有单个非聚集索引的表(索引一列)并通过该列搜索一行,则它将执行Index Seek – RID – 数据行查找 – 结果 但是,如果我在不同的列上添加聚簇索引,那么相同的
当SQL Server中的表具有聚簇索引时,是否意味着所有索引查询将通过聚簇索引进行?

例如,如果我有一个具有单个非聚集索引的表(索引一列)并通过该列搜索一行,则它将执行Index Seek – > RID – >数据行查找 – >结果

但是,如果我在不同的列上添加聚簇索引,那么相同的查询将执行以下索引搜索 – >提取聚类键 – >聚集索引搜索 – >结果

这对我来说意味着非聚集索引不再在叶子处使用RID,而是使用聚簇索引的聚类密钥“终止”是对的吗?

解决方法

是的,你有很多想法.

当您有聚簇索引时,任何非聚集索引还将包含聚簇索引中的列作为实际数据的“查找”.

如果您搜索非聚集索引中的值,并且您需要访问底层数据的其余列,那么SQL Server将从该非聚集索引中进行“书签查找”(或“密钥查找”)到聚集索引(其中包含数据本身,在叶级节点中).使用聚簇索引,您不再需要RID了,因此,如果RID更改(数据从一个页面移动到另一个页面),则不必更新所有索引页面.

书签查找是相当昂贵的操作,因此您可以通过INCLUDE语句向非聚集索引添加其他列.这样,您的非聚集索引将在其叶级页面上包含这些附加列,如果只需要包含在该数据集中的列,则可以从非聚集索引本身满足您的查询(在该集合索引中)情况下,它被称为“覆盖索引”),您可以自己保存一系列书签查找.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读