1

我有一个大表,目前在 sql server 2012 中有 2500000 行。主键被列为Create as clustered: Yes并且由于主键是一个uniqueidentifier我想将它更改为非集群的初学者(然后在某个时间在未来,改为聚集在日期列上)。

问题是这超时了。禁用索引的集群怎么会很慢?除了将此操作的超时时间增加到 24 小时之外,我能做些什么来加快速度并在超时之前完成?

4

1 回答 1

2

这将需要很长时间,因为它是一个聚集索引,删除它会导致整个表被重建为一个堆,并且由于你有很多行(如果你的表特别宽),这可能需要很长时间时间取决于您的 IO 性能。

此外,您可能需要仔细考虑在日期列上添加聚集索引,因为这不能保证是唯一的(因此 SQL 服务器将向聚集键添加唯一标识符,从而降低其效率以及所有其他非聚集索引的效率在表格上)此外,如果您的日期并不总是按升序或降序添加,您将分割表格,迫使 SQL Server 执行页面拆分以将值放入表格的中间而不是末尾。

聚类的最佳列是窄的、唯一的并且总是增加/减少值。身份列是一个完美的候选人。

于 2013-03-11T12:40:25.527 回答