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


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl