Beim Aktualisieren und Löschen von Einfügungen werden Ihre Indizes sowohl intern als auch extern fragmentiert.
Interne Fragmentierung bedeutet, dass Sie einen hohen Prozentsatz an freiem Speicherplatz auf Ihren Indexseiten haben. Dies bedeutet, dass SQL Server beim Durchsuchen des Index mehr Seiten lesen muss.
Externe Fragmentierung tritt auf, wenn die Seiten des Index nicht mehr in Ordnung sind, sodass SQL Server mehr Arbeit leisten muss, insbesondere in Bezug auf E / A, um den Index zu lesen.
Wenn Ihre Indizes zu fragmentiert werden, sind Ihre Abfragen bestenfalls weniger effizient, aber im schlimmsten Fall verwendet SQL Server die Indizes nicht mehr zusammen. Dies bedeutet, dass praktisch alle Abfragen einen Tabellenscan oder einen Clustered-Index-Scan durchführen müssten. Dies wird Ihre Leistung sehr beeinträchtigen!
Wenn Sie einen Index neu organisieren, verwendet SQL Server die vorhandenen Indexseiten und mischt nur die Daten in diesem Alter. Dies verringert die interne Fragmentierung und kann auch einen kleinen Teil der externen Fragmentierung entfernen. Es ist eine leichtere Operation als der Wiederaufbau und ist immer online.
Wenn Sie einen Index neu erstellen, setzt SQL Server die Daten des Index neu zusammen und verwendet einen neuen Satz von Indexseiten. Dies verringert natürlich sowohl die interne als auch die externe Fragmentierung, ist jedoch eine schwerwiegendere Operation und führt standardmäßig dazu, dass der Index offline geschaltet wird, obwohl er abhängig von Ihrer SQL Server-Version und den Einstellungen auch als Online-Operation ausgeführt werden kann.
Bitte rechnen Sie jedoch nicht mit einer Fragmentierung von 0 nach einem Rebuild. Sofern Sie keinen MAXDOP-Abfragehinweis verwenden, wird der Neuerstellungsvorgang von SQL Server parallelisiert. Je mehr Prozessoren beteiligt sind, desto größer ist wahrscheinlich die Fragmentierung, da jeder Prozessor oder Kern seinen Abschnitt oder sein Fragment des Index unabhängig von den jeweiligen Faktoren neu erstellt gegenseitig. Dies ist ein Kompromiss zwischen der besten Fragmentierungsstufe und der Zeit, die für die Neuerstellung des Index benötigt wird. Verwenden Sie für eine Fragmentierung nahe 0 MAXDOP 1 und sortieren Sie die Ergebnisse in TempDB.