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

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

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

SMILET 2019-12-13 15:10:01
您能否解释Microsoft SQL Server中Covering Index和Covered Queries的概念及其之间的关系?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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


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


查看完整回答
反对 回复 2019-12-14
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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

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


查看完整回答
反对 回复 2019-12-14
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

覆盖指数是一个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-12-14
  • 3 回答
  • 0 关注
  • 386 浏览
慕课专栏
更多

添加回答

举报

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