Wir bauen ein Data Warehouse auf, das zunächst 1 TB groß sein wird und jeden Monat um etwa 20 GB wachsen wird.
Für bestimmte Tabellen führen wir tägliche ETL-Prozesse durch, für andere wöchentlich / monatlich.
Wenn ein Datenimport in eine Tabelle ausgeführt wird, müssen die Indizes gelöscht und neu erstellt werden?
Gibt es jemals einen Grund, Indizes zu löschen und neu zu erstellen, oder werden sie automatisch aktualisiert?
Die Statistiken werden so eingestellt, dass sie automatisch aktualisiert werden.
Vielen Dank für Ihre Hilfe und Anleitung.
Ich habe dieses geniale Drehbuch:
SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +
CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END +
CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + cast(ps.partition_number as nvarchar(max)) ELSE '' END
FROM sys.indexes AS ix INNER JOIN sys.tables t
ON t.object_id = ix.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
INNER JOIN (SELECT object_id, index_id, avg_fragmentation_in_percent, partition_number
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)) ps
ON t.object_id = ps.object_id AND ix.index_id = ps.index_id
INNER JOIN (SELECT object_id, index_id, COUNT(DISTINCT partition_number) AS partition_count
FROM sys.partitions
GROUP BY object_id, index_id) pc
ON t.object_id = pc.object_id AND ix.index_id = pc.index_id
WHERE ps.avg_fragmentation_in_percent > 10 AND
ix.name IS NOT NULL
von hier:
http://weblogs.asp.net/okloeten/archive/2009/01/05/6819737.aspx
Schlagen Sie vor, dass ich dieses Skript täglich ausführe und basierend auf den Ergebnissen den generierten Code ausführe?