Hola,
Estoy viendo varias formas de particionar una tabla que tiene muchos datos y no se cual es la mejor opción respecto a la primary key, tengo dudas si seria conveniente modificarla y añadir ahi el campo por el cual se particiona o crear directamente otro indice
el cual particione por otro campo.
Genere el script desde el manager SQL y me creo esto:
Me genera varias dudas, lo que hace es lo siguiente:
- Borra la primary key
- Crea el indice CLustered por el que va a particionar
- Vuelve a crear la un indice en este caso Unico por los campos que antes era la primary, (ahora ya no es clustered)
- Y finalmente borra el indice que uso para la particion.
Por lo que veo la tabla funciona correctamente a nivel de particionado pero yo no puedo mantener la primary key tal y como estaba antes?
USE [AdventureWorksDW2016_EXT]
GO
CREATE PARTITION FUNCTION [FunParticion](datetime) AS RANGE LEFT FOR VALUES (N'2010-01-01T00:00:00')
CREATE PARTITION SCHEME [EsquemaParticion] AS PARTITION [FunParticion] TO ([PRIMARY], [FG_Historico])
ALTER TABLE [dbo].[FactResellerSales] DROP CONSTRAINT [PK_FactResellerSales_SalesOrderNumber_SalesOrderLineNumber] WITH ( ONLINE = OFF )
ALTER TABLE [dbo].[FactResellerSales] ADD CONSTRAINT [PK_FactResellerSales_SalesOrderNumber_SalesOrderLineNumber] PRIMARY KEY NONCLUSTERED
(
[SalesOrderNumber] ASC,
[SalesOrderLineNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
CREATE CLUSTERED INDEX [ClusteredIndex_on_EsquemaParticion_637483780097144640] ON [dbo].[FactResellerSales]
(
[DueDate]
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [EsquemaParticion]([DueDate])
DROP INDEX [ClusteredIndex_on_EsquemaParticion_637483780097144640] ON [dbo].[FactResellerSales]
Muchas gracias
Un saludo