为了账号安全,请及时绑定邮箱和手机立即绑定

SQL Server中的覆盖索引和覆盖查询是什么?

SQL Server中的覆盖索引和覆盖查询是什么?

慕标5832272 2019-10-29 10:55:53
您能否解释Microsoft SQL Server中Covering Index和Covered Queries的概念及其之间的关系?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

覆盖索引是一种可以满足查询中所有请求列的索引,而无需对聚集索引进行进一步查找。


没有覆盖查询之类的东西。


查看完整回答
反对 回复 2019-10-29
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果查询列表中请求的所有列select在index可用,则查询引擎不必再次查找表,这可以显着提高查询的性能。由于所有请求的列在索引中都可用,因此索引涵盖了查询。因此,该查询称为覆盖查询,而索引是覆盖索引。

如果选择列表中的列来自同一表,则聚集索引始终可以覆盖查询。


查看完整回答
反对 回复 2019-10-29
?
长风秋雁

TA贡献1757条经验 获得超7个赞

覆盖指数是一个Non-Clustered指数。聚簇索引和非聚簇索引都使用B树数据结构来改进数据搜索,不同之处在于,在聚簇索引的叶子中,整个记录(即行)实际上都存储在此处!非聚集索引的大小写。以下示例对此进行了说明:

示例:我有一个包含三列的表:ID,Fname和Lname。

//img1.sycdn.imooc.com//5db7aa63000102ac08580343.jpg

但是,对于非聚集索引,有两种可能性:表已经具有聚集索引,或者没有:

//img1.sycdn.imooc.com//5db7aa6a00015db313650848.jpg

正如两个图所示,这样的非聚集索引不能提供良好的性能,因为它们无法仅从B树中找到喜欢的值(即Lname)。相反,他们必须执行额外的“查找”步骤(查找“密钥”或“ RID”)以查找Lname的值。并且,这是覆盖索引进入屏幕的地方。在这里,ID上的非聚集索引覆盖了B树的叶子中紧挨着它的Lname的值,并且不再需要任何类型的查找。

//img1.sycdn.imooc.com//5db7aa730001388209140311.jpg


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 877 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信