En databas fragmentering uppstår när logisk ordning av databasen index inte matchar den fysiska fördelningen av data på disken . När data ändras i databasen , blir indexet tabellerna i databasen spridda över hela disken . Det ökar den tid du behöver för att få tillgång till data , vilket resulterar i minskad applikationer prestanda . MSSQL databas console kommandona tillåter dig att bygga eller defragmentera index . Du måste använda DBCC DBEREINDEX uttalande att defragmentera en MSSQL databas index . Instruktioner
1
Klicka på "Start " -knappen i Windows och välj " Alla program ". Klicka för att öppna
2
Ange följande SQL-satser i konsolen fönstret " SQL Management Console . " :
SET NOCOUNT ON ,
FÖRKLARA @ tablename varchar ( 255 ) ,
FÖRKLARA @ execstr varchar ( 400 ) ,
FÖRKLARA @ ObjectId int ,
FÖRKLARA @ indexid int ,
FÖRKLARA @ frag decimal ;
FÖRKLARA @ maxfrag decimal ,
SELECT @ maxfrag = 30,0 ; ' . "
FÖRKLARA tabeller CURSOR för iPhonen
SELECT TABLE_SCHEMA + + Tabellnamn
FRÅN INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ' bastabell " ,
CREATE TABLE # fraglist (
ObjectName char ( 255 ) ,
ObjectId int ,
IndexName char ( 255 ) , indexid
int ,
int
Lvl ,
CountPages int ,
countRows int ,
int
MinRecSize ,
MaxRecSize int ,
AvgRecSize int ,
ForRecCount int ,
Extents
int ,
ExtentSwitches int ,
AvgFreeBytes int ,
AvgPageDensity int ,
ScanDensity decimal ,
BestCount int ,
ActualCount int ,
LogicalFrag decimal ,
ExtentFrag decimal ) ,
öppna tabeller ,
HÄMTA NÄSTA
FRÅN tabeller
INTO @ tabellnamn ,
@ @ FETCH_STATUS = 0
BEGIN
INSERT INTO # fraglist
EXEC ( ' DBCC SHOWCONTIG ( '' ' + @ tabellnamn + '' ' ) katalog
MED FAST , TABLERESULTS , ALL_INDEXES , NO_INFOMSGS ');
HÄMTA NÄSTA
FRÅN tabeller
INTO @ tablename ,
END ,
NÄRA tabeller ,
DEALLOCATE tabeller ,
FÖRKLARA index CURSOR för iPhonen
SELECT ObjectName , ObjectId , indexid , LogicalFrag
FRÅN # fraglist
WHERE LogicalFrag > = @ maxfrag
OCH INDEXPROPERTY ( ObjectId , IndexName , ' IndexDepth ' ) > 0 ;
ÖPPNA index ,
HÄMTA NÄSTA
FRÅN index
INTO @ tabellnamn , @ ObjectId , @ indexid , @ frag ;
@ @ FETCH_STATUS = 0
BEGIN
PRINT " Köra DBCC INDEXDEFRAG ( 0 , ' + RTRIM ( @ tabellnamn ) + ' ,
' + RTRIM ( @ indexid ) + ' ) - fragmentering närvarande "
+ RTRIM ( CONVERT ( varchar ( 15 ) , @ frag ) ) + '%' ;
SELECT @ execstr = ' DBCC INDEXDEFRAG ( 0 , ' + RTRIM (@ ObjectId ) + ",
'+ RTRIM (@ indexid ) +' ) ';
EXEC (@ execstr );
FETCH NÄSTA
FRÅN index
INTO @ tabellnamn , @ ObjectId , @ indexid , @ frag ;
END ,
CLOSE index ,
DEALLOCATE index ;
DROP TABLE # fraglist , .
GO
3
Klicka på " File " och välj " Kör " för att defragmentera MSSQL databas index