我在 SQL Server 中有一个表,我希望将插入添加到表的末尾(而不是导致它们插入中间的集群键)。这意味着我希望表由一些会不断增加的列聚集。
这可以通过在datetime
列上进行聚类来实现:
CREATE TABLE Things (
...
CreatedDate datetime DEFAULT getdate(),
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (CreatedDate)
)
但我不能保证两人Things
不会有相同的时间。所以我的要求不能真正通过日期时间列来实现。
我可以添加一个虚拟身份 int
列,并在其上进行聚类:
CREATE TABLE Things (
...
RowID int IDENTITY(1,1),
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (RowID)
)
但是您会注意到我的表格已经包含一timestamp
列;保证单调递增的列。这正是我想要的候选集群键的特性。
所以我将表聚集在rowversion
(aka timestamp
) 列上:
CREATE TABLE Things (
...
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (timestamp)
)
我没有添加一个虚拟标识 int
列 (RowID) 来确保订单,而是使用我已经拥有的。
我正在寻找的是为什么这是一个坏主意的想法;以及其他更好的想法。
注意:社区维基,因为答案是主观的。