【发布时间】:2018-03-08 15:56:39
【问题描述】:
我们有一个现有的数据库,我们希望将聚集索引更改为唯一的、单调递增的字段(从一开始就应该如此),但我们不想更改主键,因为有数据引用此主键。
我们添加了一个新列 SequentialId 并用数据填充它,作为我们新的聚集索引。
但是我们如何改变聚集索引呢?如果可能,我们希望替换现有的聚集索引或将SequentialId 添加到当前索引作为第一列。
我们该怎么做呢?看来我们不能在不删除主键的情况下更改聚集索引(我们不能这样做)。
【问题讨论】:
-
请记住,您的聚集索引键被该表上的所有非聚集索引用来引用一行,因此您应该尽一切努力使其尽可能窄。我使用的一般经验法则是尽可能使用 INT,否则使用 GUID。
-
为什么一定要使用sequentialid呢?这似乎是一个奇怪的要求。我可以看看您是否使用了 guid,这有什么意义,但顺序值似乎有点奇怪。
-
@MJH 使用 guid 作为聚集索引不是一个好主意。它将仅用几百行就达到 99.9999% 的碎片,除非您使用 sequenceid 填充它,而这会违背目的。
-
@Sean Lange 您可以使用顺序 ID
-
@MJH 确定您可以使用顺序避免碎片,但有什么意义呢?对于聚集索引,您有一个非常宽的列,它只不过是一个占用更多空间的标识。
标签: sql sql-server