[11]告诉:
“在非聚簇索引中,叶级别不包含所有数据。除了键值之外,叶级别中的每个索引行(树的最低级别)包含一个告诉SQL Server在哪里找到与索引中的键对应的数据行的书签 书签可以采用两种形式之一。 如果表具有聚簇索引,则书签是相应数据行的聚簇索引键
。如果表是堆(换句话说,它没有聚簇索引),则书签是行标识符(RID),它是File#:Page#:Slot#。形式的实际行定位器。
这是聚簇索引键或非聚簇索引的副本有指针吗?
是否应遍历所有聚簇索引结构,即带有中间数据的b-tree,以通过聚簇表上的非聚集索引书签获取行数据?
聚集索引是什么引入直接引用变得不可能?
更新
让我重新说一下这个问题。如何做到这一点我可以自己阅读,但我想了解为什么这样做。
继续通过RID从具有(已添加)群集索引的非群集索引引用行数据会不会更有效率?
假设一个表只有非聚集索引(但没有聚簇索引) 非聚集索引叶包含实际数据的RID。用于直接访问行数据而无需查找/遍历。
添加聚簇索引意味着消除IAM(索引分配映射)页面并用聚簇索引键替换所有非聚集索引的所有RID +额外查找的必要性而不是直接访问。
这有什么意义?
UPDATE2:
我的问题被微软本人贬低了吗?再次感谢,这是一种荣誉
没有解释就没有意义。
UPDATE3:
@PerformanceDB“,我无法理解你答案中的短语:
你可以解释一下吗?“”这也意味着B-Tree在索引高度上减少了一个级别(这就是为什么它们在检查它们时很小)。“
是的,我想要插图。
我开始阅读:Debunking myths about clustered indexes - part 4 (CIXs, TPC-C & Oracle clusters),正如许多其他来源一样,它明确提到了这样一个事实,即与Oracle相比,SQL Server缺乏集群表上的直接访问功能。
Update4(Update5 - 通过删除校正):
一些回答者提到NCI叶子中的书签CI密钥在页面拆分的情况下用于地址独立的事实。
在使用 CI NCI(非聚集索引)的非聚集表中进行索引重组或解冻时,重新定位的行和NCI中的相应RID 在NCI中更改打击>被修改?
在我看来这是解决方案的不足之处 - 这行应该随着它的地址而移动,应该没有呢? 堆,完全不受页面拆分的影响吗?由于行中可变大小数据类型的大小增加
相关问题:
:
[11]
Microsoft®SQLServer™2005内部:存储引擎
作者:Kalen Delaney - (固体素质学习)
...............................................
出版商:微软出版社
发布日期:2006年10月11日
打印ISBN-10:0-7356-2105-5
打印ISBN-13:978-0-7356-2105-3
页数:464
[11A] p.250章节索引组织来自第7章。索引内部和管理
这是有用的在线copypaste从它 http://sqlserverindexeorgnization.blogspot.com/
虽然没有任何信用来源
答案 0 :(得分:4)
答案 1 :(得分:2)
让我重新说一下这个问题。怎么样 这样做我可以读自己,但我 想要明白为什么要这样做 方式。
它不会更有效率 继续通过RID引用行数据 来自非聚集索引 (已添加)群集?
NO!如果某个表有插入,并且发生了页面拆分,那么您可能必须更新许多使用RID指向这些数据行的新位置的引用已被移动到SQL Server中的新页面。这就是为什么 SQL Server团队选择使用集群密钥作为“数据指针”,可以这么说。发生页面拆分时,聚类键的值不会更改,因此不需要更新索引。
答案 2 :(得分:2)
继续通过RID从具有(已添加)群集索引的非群集索引引用行数据会不会更有效率?
聚集索引的重点是通过逻辑定位器(通常不会改变)访问记录,而不是物理。
如果索引指向物理RID
并且某行更改了其物理位置(例如来自页面拆分),则所有索引也需要更新。
这正是发明聚簇索引所要解决的问题。
答案 3 :(得分:1)
如果表具有聚簇索引,则每个非聚簇索引行都包含聚簇索引键的副本。
如果表没有聚簇索引,即表是堆,则每个非聚簇索引行包含根据文件标识符(ID),页码和页面上行号构建的指针。整个指针称为行ID(RID)。
使用聚簇索引识别(选择)行时,您将拥有该行中的所有列。 当您在非聚集索引中标识行时,需要执行另一个查找步骤以获取未包含在非聚集索引中的列。
答案 4 :(得分:1)
它不会更有效率 继续通过RID引用行数据 来自非聚集索引 (已添加)群集?
在许多情况下,效率更高,是的。我认为聚集索引最初是以这种方式实现的(在6.0版本中)。据推测,由于marc_s提到的原因,它们已被更改,如果您的聚簇索引具有大量页面拆分,则这是有意义的。
答案 5 :(得分:0)
我不会发布这个(我的)问题,我在发布之前看过that answer by AlexSmith there,我在发布后几分钟就看到了这个问题,并且已经在这里回答:
很可惜,这里不可能接受它作为答案
更新:
accepted here answer by PerformanceDBA告诉:“问题是doco是gobbledegook,并且增加了它声称它澄清的混乱”
好吧,所有msdn文档告诉并显示,例如,cf。来自Clustered Index Structures与"Heap Structures"的图片集群表没有IAM页面。同时,来自Inside the Storage Engine: Using DBCC PAGE and DBCC IND to find out if page splits ever roll back的代码的输出显示相反的结果。
我不想在这里继续发送垃圾邮件,而是将我的提问和参与转移到/www.sqlservercentral.com/Forums
我的相关问题: