Tengo una tabla que tiene un índice agrupado en dos columnas: la clave principal de la tabla. Se define como sigue:La mejor manera de cambiar el índice agrupado (PK) en SQL 2005
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]
I desea eliminar esta PK índice agrupado y añadir un índice agrupado como sigue y añadir una restricción de clave primaria utilizando un índice no agrupado, también se muestra a continuación.
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]
que iba a caer sólo el PK índice agrupado, a continuación, añadir el nuevo índice agrupado y luego añadir el índice de clave no agrupado primaria, pero supe que borrar el índice agrupado existente haría que los datos de la tabla a ser reordenado (ver respuesta aquí What happens when I drop a clustered primary key in SQL 2005), que no creo que deba ser necesario. La tabla está golpeando 1 TB, así que realmente quiero evitar cualquier reordenamiento innecesario.
Mi pregunta es, ¿cuál es la mejor manera de pasar de la estructura existente a la estructura deseada?
EDIT: Solo quiero aclararlo. La tabla es de 1TB y desafortunadamente no tengo espacio para crear una tabla temporal. Si hay una manera de hacerlo sin crear una tabla temporal, por favor avíseme.
Esa no es una opción. Tengo una tabla de 1TB en un RAID de 1.5TB. –
SQL Server necesitará espacio tanto para el reordenamiento como para el traslado. Si no tiene espacio, puede usar la opción MOVER A en DROP INDEX para crear su tabla en un almacenamiento temporal, y luego volver a crearla en su RAID. – Quassnoi
Puede transferir filas en trozos, eliminándolos de la fuente sobre la marcha. Sin embargo, ese sería un proceso muy lento. –