【发布时间】:2011-05-02 05:47:01
【问题描述】:
[11] 告诉:
"在非聚集索引中,叶级不包含所有数据。除了键值外,叶级(树的最低级)中的每个索引行都包含一个书签告诉 SQL Server 在哪里可以找到与索引中的键对应的数据行。
书签可以采用两种形式之一。 如果表有聚集索引,则书签是对应数据行的聚集索引键
.如果表是堆(换句话说,它没有聚集索引),则书签是行标识符 (RID),它是 File#:Page#:Slot# 形式的实际行定位器。"
这是聚集索引键的副本还是非聚集索引有指向它的指针?
是否应该遍历所有聚集索引结构,即具有中间数据的 b-tree,以通过聚集表上的非聚集索引书签获取行数据?
聚集索引导致直接引用变得不可能的原因是什么?
更新:
让我重新表述这个问题。这是如何完成的,我可以自己阅读,但我想了解为什么会这样做。
继续通过 RID 从具有(添加)聚集索引的非聚集索引中引用行数据会不会效率更高?
假设一个表只有非聚集索引(但没有聚集索引)。
非聚集索引叶子包含真实数据的 RID。无需查找/遍历即可直接访问行数据。
添加聚集索引意味着消除 IAM(索引分配映射)页面并用聚集索引键替换所有非聚集索引的所有 RID + 需要额外查找而不是直接访问。
这有什么意义?
更新 2:
我的问题是否被微软本人否决了?再次感谢,这是一种荣誉。
不解释就投反对票是没有意义的。
更新3:
@PerformanceDB",我无法理解您回答中的短语:
""这也意味着 B-Tree 的索引高度减少了一级(这就是为什么如果你检查它们它们很小的原因)。"
你能解释一下吗?
是的,我想要插图。
我开始阅读:Debunking myths about clustered indexes - part 4 (CIXs, TPC-C & Oracle clusters),它与许多其他来源一样,明确指出 SQL Server 与 Oracle 相比缺乏对聚簇表的直接访问功能。
Update4(Update5 - 已被删除):
一些回答者提到了这样一个事实,即 NCI 叶中的书签 CI 密钥用于在页面拆分的情况下实现地址独立性。
在使用 CI NCI(非聚集索引)的非聚集表中的索引重组或碎片整理期间,NCI 中的行重定位和相应的 RID NCI 中的更改罢工>被修改?
在我看来,这似乎是寻址方案的缺陷——该行应该随着它的地址移动,不是吗?
此外,堆是否完全不受页面拆分的影响?由于行中可变大小数据类型的大小增加
相关问题:
- What do I miss in understanding the clustered index?
- Why/when/how is whole clustered index scan chosen rather than full table scan?
- Reasons not to have a clustered index in SQL Server 2005
引用:
[11]
Microsoft® SQL Server™ 2005 内部:存储引擎
由 Kalen Delaney -(坚实的质量学习)
..................................
出版商:微软出版社
发布日期:2006 年 10 月 11 日
打印 ISBN-10:0-7356-2105-5
打印 ISBN-13:978-0-7356-2105-3
页数:464
[11a] p.250 第 7 章中的索引组织。索引内部和管理
这是有用的在线复制粘贴
http://sqlserverindexeorgnization.blogspot.com/
虽然没有任何来源的学分
【问题讨论】:
-
+!谢谢。提问者通过单击信封按钮以及添加到他收藏夹中的问题的帖子和 cmets 来查看他自己问题的答案。我现在将在我的主要帖子中添加对您的回答的澄清问题
标签: sql-server database performance database-design indexing