复合非聚簇索引与非聚簇包含的区别 - 索引树结构差异

时间:2016-10-14 12:42:47

标签: sql-server sql-server-2008 indexing

我试图从几个小时开始谷歌它仍然不清楚。

有什么区别:

Create Index NonClusteredComposit_IDX ON Table(id,quantity,price)
Create Index NonClusteredCompositAndInclude_IDX ON Table(id) Include (price,quantity).

仅限指数lvl。

我了解它们是如何工作的,甚至何时使用它们。

但我无法理解的是,数据是如何存储在NonClusteredCompositAndInclude_IDX中的?

这个架构会发生什么变化: 索引页面包含索引数据(id,数量,价格)和指向RID的指针(当表是堆时)或指向B树中页面的指针(对于B树/集群表)。

enter image description here

从文档中我知道,当我包含列时,数据存储在Leaf节点中,但如果我们在谈论Index内部的架构,我看不出这与正常的Index On(1,2,3)之间有什么区别

任何人都可以描述我在索引架构方面的差异吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

在第一种方法中,将对这三个属性进行排序 - 身份,数量,价格

在第二种方法中,排序仅在“id”上,但“id”包含“数量,价格”的值,因此它不需要进行键查找或去除查找以获得相应的属性。

为了说明这一点,如果你在其中一个表中创建下面的索引,两者都会进行索引搜索,但是如果你检查读取的行数,则它与排序数据有所不同,第二种方法对所选“id”进行全扫描“

enter image description here

检查第一个索引的读取次数...

enter image description here

在检查第二个索引的读取次数时,它证明它完全扫描了搜索数据的索引,因此您获得了188条记录

enter image description here