DBCC INDEXDEFRAG (Transact-SQL)

Aktualisiert: 14. April 2006

Defragmentiert Indizes der angegebenen Tabelle oder Sicht.

ms177571.note(de-de,SQL.90).gifWichtig:
Dieses Feature wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Verwenden Sie dieses Feature beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen ALTER INDEX.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

DBCC INDEXDEFRAG
(
    { database_name | database_id | 0 } 
        , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
    [ WITH NO_INFOMSGS ] 

Argumente

  • database_name | database_id | 0
    Die Datenbank, für die ein Index defragmentiert werden soll. Wird 0 angegeben, wird die aktuelle Datenbank verwendet. Datenbanknamen müssen den Regeln für Bezeichner entsprechen.
  • table_name | table_id | view_name | view_id
    Die Tabelle oder Sicht, für die ein Index defragmentiert werden soll. Tabellen- und Sichtnamen müssen den Regeln für Bezeichner entsprechen.
  • index_name | index_id
    Der Name der ID für den Index, der defragmentiert werden soll. Wenn nicht angegeben, werden von der Anweisung alle Indizes der angegebenen Tabelle oder Sicht defragmentiert. Indexnamen müssen den Regeln für Bezeichner entsprechen.
  • partition_number | 0
    Die Partitionsnummer des Indexes, der defragmentiert werden soll. Wenn nichts oder 0 angegeben ist, werden von der Anweisung alle Partitionen im angegebenen Index defragmentiert.
  • WITH NO_INFOMSGS
    Unterdrückt alle Informationsmeldungen mit einem Schweregrad von 0 bis 10.

Resultsets

DBCC INDEXDEFRAG gibt das folgende Resultset zurück (die Werte können abweichen), wenn ein Index in der Anweisung angegeben ist (sofern nicht WITH NO_INFOMSGS angegeben ist):

Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359           346         8

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Hinweise

DBCC INDEXDEFRAG defragmentiert die Blattebene eines Indexes, sodass die physische Reihenfolge der Seiten mit der logischen Reihenfolge (von links nach rechts) der Blattknoten übereinstimmt. Dadurch wird die Leistung beim Durchsuchen des Indexes verbessert.

ms177571.note(de-de,SQL.90).gifHinweis:
Wenn DBCC INDEXDEFRAG ausgeführt wird, tritt die Indexdefragmentierung seriell auf. Das bedeutet, dass der Vorgang bei einem einzelnen Index mit einem einzigen Thread ausgeführt wird. Es tritt keine Parallelität auf. Außerdem werden Vorgänge für mehrere Indizes aus derselben DBCC INDEXDEFRAG-Anweisung nur für jeweils einen Index ausgeführt.

DBCC INDEXDEFRAG komprimiert auch die Seiten eines Indexes und berücksichtigt den beim Erstellen des Indexes angegebenen Füllfaktor. Alle leeren Seiten, die durch diese Komprimierung erstellt wurden, werden entfernt. Weitere Informationen finden Sie unter Füllfaktor.

Wenn sich ein Index über mehr als eine Datei erstreckt, defragmentiert DBCC INDEXDEFRAG nur jeweils eine Datei. Seiten werden nicht zwischen Dateien migriert.

Alle fünf Minuten sendet DBCC INDEXDEFRAG einen Bericht mit dem geschätzten fertig gestellten Prozentsatz an den Benutzer. DBCC INDEXDEFRAG kann an zu jedem Zeitpunkt des Vorgangs beendet werden. Der bereits fertig gestellte Prozentsatz bleibt erhalten.

Im Gegensatz zu DBCC DBREINDEX bzw. zum Vorgang der Indexerstellung allgemein ist DBCC INDEXDEFRAG ein Onlinevorgang. Es werden keine Sperren über längere Zeit errichtet. Daher blockiert DBCC INDEXDEFRAG keine aktiven Abfragen oder Aktualisierungen. Ein relativ unfragmentierter Index kann schneller defragmentiert werden, als ein neuer Index erstellt werden kann, da die Defragmentierungszeit im Zusammenhang mit der Fragmentierungsebene steht. Das Defragmentieren eines stark fragmentierten Indexes kann wesentlich länger dauern als der Neuerstellungsvorgang.

Die Defragmentierung wird immer vollständig protokolliert, unabhängig von der Einstellung des Datenbank-Wiederherstellungsmodells. Weitere Informationen finden Sie unter ALTER DATABASE (Transact-SQL). Bei der Defragmentierung eines stark fragmentierten Indexes werden möglicherweise mehr Protokolleinträge erstellt als bei der Indexerstellung mit vollständiger Protokollierung. Die Defragmentierung wird jedoch als eine Reihe von kurzen Transaktionen ausgeführt, sodass kein großes Protokoll benötigt wird, wenn Protokollsicherungen regelmäßigen durchgeführt werden oder SIMPLE als Einstellung für das Wiederherstellungsmodell festgelegt ist.

DBCC INDEXDEFRAG verschiebt Indexblattseiten an andere Stellen. Daher führt das Ausführen von DBCC INDEXDEFRAG für einen Index, der mit anderen Indizes auf dem Datenträger interleaved ist, nicht dazu, dass die Blattseiten im Index zusammenhängend sind. Erstellen Sie den Index neu, um das Gruppieren von Seiten zu verbessern.

DBCC INDEXDEFRAG kann nicht zum Defragmentieren eines deaktivierten Indexes oder eines Indexes mit deaktivierter Seitensperre (OFF) verwendet werden. Das Verwenden von DBCC INDEXDEFRAG für Systemtabellen wird nicht unterstützt.

Berechtigungen

Der Aufrufer muss Besitzer der Tabelle oder ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.

Beispiele

Im folgenden Beispiel werden alle Partitionen des PK_Product_ProductID-Indexes in der Production.Product -Tabelle in der AdventureWorks-Datenbank defragmentiert.

DBCC INDEXDEFRAG (AdventureWorks, "Production.Product", PK_Product_ProductID)
GO

Siehe auch

Verweis

DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)

Andere Ressourcen

Tabellen- und Indexarchitektur

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

14. April 2006

Geänderter Inhalt:
  • Die Syntax wurde korrigiert, indem die Index- und Partitionsnummerklauseln als optional dargestellt werden.