首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server中的聚集索引

SQL Server中的聚集索引
EN

Stack Overflow用户
提问于 2014-10-26 17:59:42
回答 2查看 182关注 0票数 1

我知道,当我们在Server中创建带有主键的表时,会自动创建聚集索引。但是,如果我从该表中删除一行,则与此行相关的聚集索引仍然保留在索引表中还是会自动删除?如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?( mysql、oracle等也是如此吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 23:23:26

对于甲骨文或MySQL,默认情况并不相同。每个数据库都有自己的默认值和特定的功能。有些人甚至用同样的词来表达不同的意思。

Oracle不默认为聚集索引,在Oracle中,等效的是索引组织表。在Oracle中,集群的定义是一种可以存储2个或多个表并按相同顺序排序的结构。

如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?

重建指标的第一条规则--测量、测量、测量。证明重建是有益的,除非事情变了,否则别再这样做了。

简单的删除(或千)并不是重建索引的自动原因。

如果您要重建一个索引,您应该知道(1)在(2)访问之前和之后的数据块有多少。

关于索引重建是一种普遍的做法,存在着许多错误的信息和迷信。您所引用的索引是B-树结构。它们被设计成可扩展的,O(log )访问。没有证据表明默认情况下必须重新组织索引。每个指数都是自己的动物。经过一段时间后,B树指数达到了一个平衡点(平衡),当你重建它们时,你会压缩它们(这是一件好事),但它们最终会回到那个停滞点。除非我发现其中之一的性能/ IO问题,否则我将根据具体情况手动处理。

重建的两个最大好处是:

  1. 更密集地将数据打包到更少的块中,从而改进了缓存和IO。
  2. 根据累积的实际数据重新排序非聚集索引。如果您的访问模式总是连续的(包括插入),那么这通常不是一个问题,这些块将被排序。

Oracle和SQL Server是非常棒的技术。在没有证据的情况下重建索引对专业的DBA没有好处。

票数 1
EN

Stack Overflow用户

发布于 2014-10-26 18:05:21

我知道,当我们在sqlserver中创建带有主键的表时,会自动创建聚集索引。

只有当默认选项或群集指定为关键字时,这才是正确的。主键也可以是非聚集索引。

但是,如果我从该表中删除一行,则与此行相关的聚集索引仍然保留在索引表中还是会自动删除?

如果它确实是一个聚集索引,那么索引就是表数据。如果你从桌子上删除什么东西,它就不见了。有一些内部工作,如鬼记录,但是的,数据已经消失(从应用程序的角度)。

如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?

事实上,还有其他一些背景任务可以处理某些“隐藏”功能。最终,当碎片(内部或外部)开始成为问题时,您会想要重新组织或重建索引。这将取决于其他变量,包括表结构、访问等。

( mysql、oracle等也是如此吗?)

问题是标记为Server,所以我回答Server标记。对于一个帖子来说,这是一个非常宽泛的问题。

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

https://stackoverflow.com/questions/26576148

复制
相关文章

相似问题

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