Ich habe eine Tabelle, die einen gruppierten Index auf zwei Spalten hat - den Primärschlüssel für die Tabelle. Es ist wie folgt definiert:
ALTER TABLE Table ADD CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED
(
[ColA] ASC,
[ColB] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
Ich möchte diesen gruppierten Index PK entfernen und einen gruppierten Index wie folgt hinzufügen und eine Primärschlüssel-Beschränkung unter Verwendung eines nicht gruppierten Indexes hinzufügen, wie unten gezeigt.
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table]
(
[ColC] ASC,
[ColA] ASC,
[ColD] ASC,
[ColE] ASC,
[ColF] ASC,
[ColG] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
ALTER TABLE Table ADD CONSTRAINT
PK_Table PRIMARY KEY NONCLUSTERED
(
ColA,
ColB
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Ich wollte einfach den PK gruppierten Index löschen, dann den neuen gruppierten Index hinzufügen und dann den nicht gruppierten Primärschlüsselindex hinzufügen, aber ich habe erfahren, dass das Löschen des vorhandenen gruppierten Indexes dazu führen würde, dass die Tabellendaten neu geordnet werden (siehe Antwort hier Was passiert, wenn ich einen gruppierten Primärschlüssel in SQL 2005 lösche), was meiner Meinung nach nicht notwendig sein sollte. Die Tabelle ist 1 TB groß, daher möchte ich wirklich jede unnötige Neuordnung vermeiden.
Meine Frage ist, wie man am besten von der vorhandenen Struktur zur gewünschten Struktur gelangt?
EDIT: Möchte nur klarstellen. Die Tabelle ist 1 TB groß und ich habe leider keinen Platz, um eine temporäre Tabelle zu erstellen. Falls es einen Weg gibt, dies ohne Erstellen einer Temp-Tabelle zu tun, lassen Sie es mich bitte wissen.