Une fragmentation se produit lorsque la base de données de l`ordre logique de l`index de base de données ne correspond pas à l`affectation physique des données sur le disque. Comme les changements de données dans la base de données, les tables d`index de la base de données deviennent dispersés à travers le disque. Il augmente le temps nécessaire pour accéder aux données, ce qui entraîne une baisse des performances des applications. Les commandes de la console de base de données MSSQL vous permettent de reconstruire ou indices de defrag. Vous devez utiliser l`instruction DBCC DBEREINDEX défragmenter un indice de base de données MSSQL.
Clique le "Démarrer" bouton dans Windows et sélectionnez "Tous les programmes." Cliquez pour ouvrir la "SQL Management Console."
Entrez les instructions SQL suivantes dans la fenêtre de la console:
NOCOUNT SET ON-
DECLARE @tablename varchar (255) -
DECLARE @execstr varchar (400) -
DECLARE @objectid int
DECLARE @indexid int
DECLARE @frag decimal-
DECLARE @maxfrag décimal;@maxfrag SELECT = 30,0;
DECLARE tables CURSOR FOR
TABLE_SCHEMA SELECT + `.` + TABLE_NAME
DE INFORMATION_SCHEMA.TABLES
WHERE `BASE TABLE` table_type =;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,
Extents int,
ExtentSwitches int,
AvgFreeBytes int,
AvgPageDensity int,
ScanDensity décimal,
BestCount int,
ActualCount int,
LogicalFrag décimal,
ExtentFrag décimal);tables ouvertes;
FETCH SUIVANT
à partir de tables
EN @tablename;TANDIS @@ FETCH_STATUS = 0
COMMENCER
INSERT INTO #fraglist
EXEC ( `DBCC SHOWCONTIG (` `` + @tablename + `` `)AVEC FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS `) -
FETCH SUIVANT
à partir de tables
EN @ tablename-FIN;
Tableaux- FERMER
tables DEALLOCATE;DECLARE index CURSOR FOR
SELECT ObjectName, ObjectId, IndexId, LogicalFrag
DE #fraglist
OÙ LogicalFrag gt; = @maxfragET INDEXPROPERTY (ObjectId, IndexName, `IndexDepth`) gt; 0-
indices ouverts;
FETCH SUIVANT
à partir des indices
EN @tablename, @objectid, @indexid, @frag;TANDIS @@ FETCH_STATUS = 0
COMMENCER
PRINT `exécution DBCC INDEXDEFRAG (0,` + RTRIM (@tablename) + `,`+ RTRIM (@indexid) +`) - fragmentation actuellement `
+ RTRIM (CONVERT (varchar (15), @ frag)) + `%` -@execstr SELECT = `DBCC INDEXDEFRAG (0,` + RTRIM (@objectid) + `,
`+ RTRIM (@indexid) +`) `-
EXEC (@execstr);
FETCH SUIVANT
à partir des indices
EN @tablename, @objectid, @indexid, @ frag-FIN;
indexes- FERMER
index DEALLOCATE;DROP TABLE # fraglist-
ALLERCliquez "Fichier" et sélectionnez "Courir" défragmenter l`index de base de données MSSQL.