Hvordan å bedra en MSSQL database

En database fragmentering oppstår når den logiske rekkefølgen av databasen indeksen ikke samsvarer med fysisk tildeling av dataene på disken. Ettersom data endringer i databasen, indeks tabeller i databasen bli spredt over disken. Det øker den tiden du trenger for å få tilgang til data, noe som resulterer i redusert applikasjoner ytelse. De MSSQL database konsollkommandoer kan du gjenoppbygge eller bedra indekser. Du må bruke DBCC DBEREINDEX statement å bedra en MSSQL database indeks.

Bruksanvisning

1 Klikk på "Start" -knappen i Windows og velg "Alle programmer". Klikk for å åpne "SQL Management Console."

2 Skriv inn følgende SQL-setninger i konsollen vinduet:

SET NOCOUNT PÅ;
ERKLÆRER @tablename varchar (255);
ERKLÆRER @execstr varchar (400);
ERKLÆRER @objectid int;
ERKLÆRER @indexid int;
ERKLÆRER @frag desimal;
ERKLÆRER @maxfrag desimal;

SELECT @maxfrag = 30,0;

ERKLÆRER tabeller CURSOR FOR
VELG TABLE_SCHEMA + '.' + TABLE_NAME
Fra INFORMATION_SCHEMA.TABLES
HVOR TABLE_TYPE = 'BASE TABLE';

CREATE TABLE #fraglist (
Object char (255),
Objekt int,
IndexName char (255),
IndexId int,
Lvl int,
CountPages int,
CountRows int,
MinRecSize int,
MaxRecSize int,
AvgRecSize int,
ForRecCount int,
Extents int,
ExtentSwitches int,
AvgFreeBytes int,
AvgPageDensity int,
ScanDensity desimal,
BestCount int,
ActualCount int,
LogicalFrag desimal,
ExtentFrag desimal);

ÅPNE bordet;

HENT NESTE
Fra tabeller
INTO @tablename;

MENS @@ FETCH_STATUS = 0
BEGYNNE
INSERT INTO #fraglist
EXEC ( 'DBCC SHOWCONTIG (' '' + @tablename + '' ')

WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS');

HENT NESTE

FROM tables
INTO @tablename;

SLUTT;

LUKK bordet;
DEALLOCATE bordet;

ERKLÆRER indekser CURSOR FOR
SELECT Object, Objekt, IndexId, LogicalFrag
Fra #fraglist
HVOR LogicalFrag> = @maxfrag

AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0;

ÅPNE indekser;

HENT NESTE
Fra indekser
INTO @tablename, @objectid, @indexid, @frag;

MENS @@ FETCH_STATUS = 0
BEGYNNE
PRINT 'Utfører DBCC INDEXDEFRAG (0,' + RTRIM (@tablename) + ',

' + RTRIM(@indexid) + ') - fragmentation currently '
+ RTRIM(CONVERT(varchar(15),@frag)) + '%';

SELECT @execstr = 'DBCC INDEXDEFRAG (0,' + RTRIM (@objectid) + ',

' + RTRIM(@indexid) + ')';

EXEC (@execstr);

HENT NESTE

FROM indexes
INTO @tablename, @objectid, @indexid, @frag;

SLUTT;

LUKK indekser;
DEALLOCATE indekser;

DROP TABLE #fraglist;

3 Klikk på "File" og velg "Kjør" for å defragmentere MSSQL database indeksen.