Ich habe eine Tabelle in SQL Server, bei der ich möchte, dass Einfügungen am Ende der Tabelle hinzugefügt werden (im Gegensatz zu einem Clustering-Schlüssel, der bewirken würde, dass sie in der Mitte eingefügt werden). Das heißt, ich möchte, dass die Tabelle nach einer Spalte geclustert wird, die ständig zunimmt.
Dies könnte durch die Bildung von Clustern auf einer datetime
Spalte:
CREATE TABLE Things (
...
CreatedDate datetime DEFAULT getdate(),
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (CreatedDate)
)
Aber ich kann nicht garantieren, dass zwei Things
haben nicht die gleiche Zeit. Meine Anforderungen können also nicht wirklich durch eine Datetime-Spalte erreicht werden.
Ich könnte einen Dummy hinzufügen Identität int
Spalte und Cluster darauf:
CREATE TABLE Things (
...
RowID int IDENTITY(1,1),
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (RowID)
)
Aber Sie werden feststellen, dass meine Tabelle bereits eine timestamp
Spalte; eine Spalte, die garantiert monoton ansteigend ist. Dies ist genau die Eigenschaft, die ich mir für einen Kandidaten-Clusterschlüssel wünsche.
Also clustere ich die Tabelle auf der rowversion
(alias timestamp
) Spalte:
CREATE TABLE Things (
...
[timestamp] timestamp,
CONSTRAINT [IX_Things] UNIQUE CLUSTERED (timestamp)
)
Anstatt einen Dummy hinzuzufügen Identität int
Spalte (RowID), um eine Reihenfolge zu gewährleisten, verwende ich das, was ich bereits habe.
Ich möchte wissen, warum dies eine schlechte Idee ist und welche anderen Ideen besser sind.
Note : Community-Wiki, da die Antworten subjektiv sind.