首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在理解聚集索引方面,我错过了什么?

在理解聚集索引方面,我错过了什么?
EN

Stack Overflow用户
提问于 2010-10-29 07:26:57
回答 2查看 845关注 0票数 0

在没有任何索引的情况下,通过IAM (索引分配映射)访问表行。

我可以通过编程方式使用IAM直接访问行吗?

没有索引是否意味着读取特定行的唯一方法是全表扫描读取所有表?

为什么我不能参与更具体的直接访问?

“如果表是堆(换句话说,它没有聚集索引),则书签是行标识符(RID),它是表单File#:Page#:Slot#”1a中的实际行定位器。

对时隙没有进一步的定义。其他消息来源告诉我们,Slot#实际上是行号。对,是这样?还是需要进一步与IAM并列来确定具体的行?

现在,聚集索引的引入意味着不能直接访问任何数据,而只能通过最终的聚集索引查找或顺序遍历聚集的叶节点。

我是否正确地理解,引入聚集索引只有利于选择连续的相邻行(范围),并且仅通过聚集索引键?

聚类一个表还有哪些好处?

我是否正确地理解聚集索引引入会恶化非聚集索引对非精确匹配查询的性能好处?没有直接访问,顺序访问不能并行化,非聚集索引由聚集索引键等增加,对吗?

好的,我看到对一个表进行聚类对于非常具体和被理解的上下文来说是有意义的,而主键的创建在表聚类中总是默认的。为什么会这样呢?

在理解聚集索引时,我错过了什么?

1

™2005内部:存储引擎

卡伦·德莱尼(固体质量学习)

...............................................

出版商:微软出版社

酒馆日期:2006年10月11日

印刷ISBN-10: 0-7356-2105-5

印刷ISBN-13: 978-0-7356-2105-3

页数: 464

1a p.250第7章索引部分的组织。索引内部和管理

下面是网上有用的拷贝。

http://sqlserverindexeorgnization.blogspot.com/

虽然没有任何信用来源

相关问题:

更新: @PerformanceDBA,

  • "please,忘记你引用的文档,重新开始“

以什么为基础重新开始我?

任何推荐信任何建议。技巧如何重新开始?

  • **“聚集索引总是更好的”

你能回答我的问题吗,Why/when/how is whole clustered index scan chosen rather than full table scan?,疑问是什么是完全聚集索引扫描的意义。它不读比全表扫描更多吗?

  • “如果有IAM,那么就有索引”

那么,如果根本没有索引,就没有IAM了?

如果有CI,就会有我吗?

我该如何核实/研究它?

如果所有的文档都相反:

  • 关于非索引表
  • 如果存在聚集索引,则不存在IAM。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-29 08:46:46

有很多问题。是的,IAM用于在堆中查找页面。不同之处在于,如果没有索引,就无法知道为任何给定数据检索哪些页面。SQL /关系数据模型的一个重要特性是查询仅通过数据值访问数据,而不是直接使用指针或其他结构。

插槽号只标识页面中的一行。在页面中,即使在聚集索引中,行数据也没有逻辑排序。每个数据页都包含一个行偏移表,该表指向页中行的位置。

聚集索引可以减缓来自非聚集索引的数据访问速度,因为需要额外的书签查找。这可以通过使用INCLUDE子句向NC索引添加列来缓解。有时,在表上不使用聚集索引可能会更有效。

票数 1
EN

Stack Overflow用户

发布于 2010-10-29 12:40:38

首先,请在“无法直接访问群集表中的数据行--为什么?”下面阅读我的答案。

如果有IAM,那么就有指数。

但是,如果不是CI,那么行在堆中,如果您想直接读取它(不使用NCI,或者不存在索引),则只能扫描Heap。

聚集索引总是比没有索引更好。对于异常或不符合标准的情况,有一个例外和一个警告:

  1. 非唯一CI密钥。这会导致溢出页面。关系表需要有唯一的键,所以这不是关系表。通过重载列,CI可以非常容易地变得独特。一个非唯一的CI仍然是更好的(根据我的另一篇文章)有一个非唯一的CI比没有CI。
  2. 单调键。通常是标识列。插入的键总是在最后一个页面上插入,而不是随意插入分布在整个数据存储结构中的行(与“好的”自然关系键一样)。这会导致插入热点,并降低并发性。关系键应该是自然唯一的;代理项始终是一个额外的索引。仅代理项不是关系表(它是一组具有行标识符的未正常化电子表格,将它们连接在一起;您将无法从中获得数据库的epower )。。

因此,长期的建议是,使用NCI作为单调键,并确保CI允许良好的数据分发。

CIs的优势是巨大的,没有很好的理由拥有它(正如上面提到的那样,可能有不好的原因)。

CIs允许范围查询;NCIs不允许。但这并不是唯一的原因。

另一个警告是,您需要保持CI键的宽度较小,因为它是在NCIs中携带的。现在,这通常不是一个问题,因为在,宽CI键是好的。但是,如果你有一堆伪装成数据库的Unormalise电子表格,这会导致比规范化数据库更多的指数,这确实是一个考虑因素。因此,对帝国奉献者的长期建议是,保持CI键的宽度。独联体没有“增加”NCIs,这是不准确的。如果您有NCIs,那么,它将有一个指针或CI键;如果您有一个CI (具有所有的好处),那么成本是,一个CI键而不是一个RowId,可以忽略不计。所以准确的说法是,胖宽CI键增加了NCIs。

无论谁说连续访问CIs不能并行化,都是错误的(MS可能在一个版本中破坏它并在下一个版本中修复它,但这是暂时的)。

使用ANSI SQL ...PRIMARY密钥..。表示法默认为唯一群集。因为数据库应该是关系型的。而唯一的PK应该是一个很好的友好关系键,而不是一个愚蠢的身份列。因此,主键总是(不包括异常)是最好的聚类候选。

您可以通过避免ANSI ...PRIMARY键来创建任何您想要的索引.符号和使用创建唯一的索引符号代替。

回答你的最后一个问题是不可能的,你必须不断地问问题,直到你用完为止。但是,请忘记你所引用的文档,重新开始,否则我们将在这里讨论清楚的知识和吞咽的知识之间的区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4049845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档