W SQL Server można wykonać odbudowę indeksu dla wybranej partycji. Nie trzeba już przebudowywać całego indeksu na całej wybranej tabeli partycjonowanej.
Oczywiście we wcześniejszych wersjach mając SQL Server 2012 w codziennym procesie zasilania korzystając z danych ETL, stosowano dość powszechną praktykę:
- Wyłączenie indeksów w tabeli docelowej (przynajmniej indeksy nieklastrowe)
- Wstawienie nowych danych
- Przebudowa NCI
Praca w ten sposób jest zwykle optymalna, ponieważ SQL Server nie musi aktualizować NCI podczas importowania danych. Wyobraź sobie jednak, że mamy siedem lat danych. Oznacza to 7 * 12 = 94 partycji, z których tylko jedna partycja jest aktywna. Dla nas odbudowanie całego indeksu będzie prawie 99% zbędna
Od wersji SQL Server 2008 można już przebudować indeks na wybranej partycji.
ALTER INDEX ALL ON REPORTS REBUILD PARTITION = n
-- przebudowa indeksów dla wybranej partycji
-- Verify the partitioned indexes.
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Sales.InvoiceLinesPartitioning'), NULL , NULL, NULL);
GO
--Rebuild only partition 5.
ALTER INDEX [CL_IDX_InvoiceLinePartitioning_InvoiceDate]
ON sales.InvoiceLinesPartitioning
REBUILD Partition = 5
WITH (DATA_COMPRESSION = PAGE, ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));
GO