我知道,当我们在Server中创建带有主键的表时,会自动创建聚集索引。但是,如果我从该表中删除一行,则与此行相关的聚集索引仍然保留在索引表中还是会自动删除?如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?( mysql、oracle等也是如此吗?)
发布于 2014-10-26 23:23:26
对于甲骨文或MySQL,默认情况并不相同。每个数据库都有自己的默认值和特定的功能。有些人甚至用同样的词来表达不同的意思。
Oracle不默认为聚集索引,在Oracle中,等效的是索引组织表。在Oracle中,集群的定义是一种可以存储2个或多个表并按相同顺序排序的结构。
如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?
重建指标的第一条规则--测量、测量、测量。证明重建是有益的,除非事情变了,否则别再这样做了。
简单的删除(或千)并不是重建索引的自动原因。
如果您要重建一个索引,您应该知道(1)在(2)访问之前和之后的数据块有多少。
关于索引重建是一种普遍的做法,存在着许多错误的信息和迷信。您所引用的索引是B-树结构。它们被设计成可扩展的,O(log )访问。没有证据表明默认情况下必须重新组织索引。每个指数都是自己的动物。经过一段时间后,B树指数达到了一个平衡点(平衡),当你重建它们时,你会压缩它们(这是一件好事),但它们最终会回到那个停滞点。除非我发现其中之一的性能/ IO问题,否则我将根据具体情况手动处理。
重建的两个最大好处是:
Oracle和SQL Server是非常棒的技术。在没有证据的情况下重建索引对专业的DBA没有好处。
发布于 2014-10-26 18:05:21
我知道,当我们在sqlserver中创建带有主键的表时,会自动创建聚集索引。
只有当默认选项或群集指定为关键字时,这才是正确的。主键也可以是非聚集索引。
但是,如果我从该表中删除一行,则与此行相关的聚集索引仍然保留在索引表中还是会自动删除?
如果它确实是一个聚集索引,那么索引就是表数据。如果你从桌子上删除什么东西,它就不见了。有一些内部工作,如鬼记录,但是的,数据已经消失(从应用程序的角度)。
如果没有自动删除,是否必须创建一个作业来重新生成和重新组织索引?
事实上,还有其他一些背景任务可以处理某些“隐藏”功能。最终,当碎片(内部或外部)开始成为问题时,您会想要重新组织或重建索引。这将取决于其他变量,包括表结构、访问等。
( mysql、oracle等也是如此吗?)
问题是标记为Server,所以我回答Server标记。对于一个帖子来说,这是一个非常宽泛的问题。
https://stackoverflow.com/questions/26576148
复制相似问题