Ich habe eine gespeicherte Prozedur, die einige Tabellen mit jeweils etwa 1,75 Millionen Zeilen abschneidet, bevor neue Daten eingefügt werden (basierend auf Daten in anderen Tabellen, Berechnungen usw.).
Grundriss ist sehr einfach:
- Tabellen abschneiden
- Fügen Sie 1,75 Millionen Zeilen in "Stapel" von ungefähr 75.000 pro Zeit ein.
Ich frage mich, ob ich die Indizes in diesem Prozess zu irgendeinem Zeitpunkt explizit neu erstellen soll. z.B
- Tabellen abschneiden
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[oder etwas ähnliches]- Fügen Sie 1,75 Millionen Zeilen ein
oder vielleicht
ALTER INDEX ALL ON xxx DISABLE
- Tabellen abschneiden
- Fügen Sie 1,75 Millionen Zeilen ein
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[oder etwas ähnliches]
Jede Hilfe wird geschätzt ... kein DBA - ein Entwickler, der die DBs ziemlich gut kennt, ist genauer!
sql-server
performance
index
BlueChippy
quelle
quelle
insert into
und im Moment gibt es keineorder by
Klausel, aber ich könnte das hinzufügen, wenn es helfen würde? ID und Code werden ebenfalls separat indiziert.Antworten:
Wie bei den meisten Fragen dieser Art kommt es darauf an. Es ist unwahrscheinlich, dass Sie die Daten in der "richtigen" Reihenfolge für alle beteiligten Indizes einfügen. Dies bedeutet, dass bei all diesen Indizes während des Einfügevorgangs wahrscheinlich viele Seiten aufgeteilt werden. Nehmen wir also an, Sie fügen in gruppierter Indexreihenfolge ein. Sie können alle nicht gruppierten Indizes deaktivieren, abschneiden, einfügen und dann alle nicht gruppierten Indizes neu erstellen. Wenn Sie beide Ansätze ausprobieren, erfahren Sie natürlich, welche Wahrheit unabhängig von der dahinter stehenden Theorie schneller ist. :) :)
quelle
Plan Basic mit allen aktivierten Indizes ist möglicherweise langsam und führt zu einer Fragmentierung.
ALTER INDEX REBUILD für eine abgeschnittene und daher leere Tabelle hat keinen Zweck, daher müssen Sie Ihren Plan A ändern. Es sollte sein:
Es mag immer noch langsam sein, aber zumindest erhalten Sie scharfe Indizes.
Plan B ist in Ordnung. Testen Sie alle drei und finden Sie heraus, welche am schnellsten ist und welche die geringste Indexfragmentierung ergibt. Dann entscheiden Sie, ob sich der Wiederaufbau lohnt.
quelle