Eine Datenbank Fragmentierung tritt auf, wenn die logische Reihenfolge der Datenbank-Index nicht mit der physikalischen Zuordnung der Daten auf der Festplatte. Da die Daten in der Datenbank ändert , werden die Index-Tabellen der Datenbank auf der Festplatte verstreut. Es erhöht die Zeit, die Sie brauchen, um auf Daten zuzugreifen , was zu einer verringerten Leistung Anwendungen . Die MSSQL-Datenbank Konsolen-Befehle können Sie für den Wiederaufbau oder defragmentieren Indizes. Sie müssen die Anweisung DBCC DBEREINDEX verwenden, um eine MSSQL-Datenbank Index defragmentieren. Anleitung
1
Klicken Sie auf die Schaltfläche "Start" in Windows und wählen Sie " Alle Programme". Klicken Sie auf das öffnen
2
Geben Sie die folgenden SQL-Anweisungen in der Konsole-Fenster " SQL Management Console . ":
SET NOCOUNT ON ;
DECLARE @ tablename varchar (255 );
DECLARE @ execstr varchar ( 400);
DECLARE @ objectid int;
DECLARE @ Indexid int;
DECLARE @ frag Nachkommastelle ;
DECLARE @ maxfrag Nachkommastelle ;
SELECT @ maxfrag = 30,0 ; '.'
DECLARE Tabellen CURSOR FOR SELECT
TABLE_SCHEMA + + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ' BASE TABLE ';
CREATE TABLE # fraglist (
ObjectName char ( 255 ),
ObjectId int ,
IndexName char ( 255) , IndexId
int ,
Lvl int ,
CountPages int ,
CountRows int ,
MinRecSize int ,
MaxRecSize int ,
AvgRecSize int ,
ForRecCount int , int
Extents ,
ExtentSwitches int ,
AvgFreeBytes int ,
AvgPageDensity int ,
ScanDensity Nachkommastelle ,
BestCount int ,
< p> ActualCount int ,
LogicalFrag Nachkommastelle ,
ExtentFrag dezimal) ;
OPEN Tabellen ;
FETCH NEXT FROM
Tabellen
INTO @ tablename ;
WHILE @ @ FETCH_STATUS = 0
BEGIN
INSERT INTO # fraglist
EXEC ( ' DBCC SHOWCONTIG ( '' ' + @ + Tabellenname ''' )
MIT FAST , TABLERESULTS , ALL_INDEXES , NO_INFOMSGS ');
FETCH NEXT FROM
Tabellen
INTO @ tablename ;
END;
SCHLIESSEN Tabellen ;
DEALLOCATE Tabellen ;
DECLARE CURSOR FOR Indizes
SELECT ObjectName , ObjectId , IndexId LogicalFrag
FROM # fraglist
WHERE LogicalFrag > = @ maxfrag
UND INDEXPROPERTY ( ObjectId , IndexName , ' IndexDepth ') > 0;
OPEN Indizes ;
FETCH NEXT FROM
Indizes
INTO Tabellenname @ , @ objectid , @ Indexid , @ frag ;
WHILE @ @ FETCH_STATUS = 0
BEGIN
PRINT ' Ausführen von DBCC INDEXDEFRAG (0, ' + RTRIM ( @ tablename ) + ' ,
' + RTRIM ( @ Indexid ) + ') - Fragmentierung derzeit '
+ RTRIM ( CONVERT ( varchar ( 15) , @ frag )) + '% ' ;
SELECT @ execstr =' DBCC INDEXDEFRAG (0, '+ RTRIM ( @ objectid ) + ' ,
' + RTRIM ( @ Indexid ) + ' )';
EXEC ( @ execstr );
FETCH NEXT FROM
Indizes
INTO Tabellenname @ , @ objectid , @ Indexid , @ frag ;
END;
SCHLIESSEN Indizes ;
DEALLOCATE Indizes ;
< p> DROP TABLE # fraglist ; .
GO
3
Klicken Sie auf " Datei" und wählen Sie "Ausführen ", um die MSSQL-Datenbank Index defragmentieren