4 Stimmen

SQL-Server: Clustering nach Zeitstempel; Vor- und Nachteile

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X