SQL Serverにテーブルがあり、テーブルの最後に挿入を追加します(中央に挿入されるクラスタリングキーとは対照的です)。これは、テーブルが常に増加する列によってクラスター化されることを意味します。
datetime
これは、列でクラスタリングすることで実現できます。
CREATE TABLE Things (
...
CreatedDate datetime DEFAULT getdate(),
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (CreatedDate)
)
しかし、私は2つThings
が同じ時間を持たないことを保証することはできません。したがって、私の要件は、日時列では実際には達成できません。
ダミーのID 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)
)
順序を確認するためにダミーのID 列(RowID)を追加するのではなく、int
すでに持っているものを使用します。
私が探しているのは、なぜこれが悪い考えなのかという考えです。そして他にどんなアイデアが良いのか。
注:回答は主観的なものであるため、コミュニティwiki。