-- Source: http://www.sqlusa.com/bestpractices2008/rebuild-all-indexes//* List all indexes in DB*/SELECTSCHEMA_NAME(o.schema_id)ASSchemaName,OBJECT_NAME(a.object_id)ASTableName,i.nameASIndexName,a.index_idASIndexID,convert(tinyint,a.avg_fragmentation_in_percent)AS[Fragment%]FROMsys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'LIMITED')ASaINNERJOINsys.indexesiONi.index_id=a.index_idANDi.object_id=a.object_idINNERJOINsys.objectsoONa.object_id=o.object_idORDERBY[Fragment%]desc-- SchemaName, TableName, IndexID/* REBUILD (ONLINE) all indexes in DB*/DECLARE@DatabaseNameSYSNAME=DB_NAME(),@TableNameVARCHAR(256),@TableSchemaVARCHAR(256)DECLARE@FILLFACTORINT=85DECLARE@DynamicSQLNVARCHAR(max)='DECLARE curAllTablesInDB CURSOR FOR SELECT TABLE_SCHEMA AS TABLESCHEMA, TABLE_NAME AS TABLENAME FROM ['+@DatabaseName+'].INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'''BEGINEXECsp_executeSQL@DynamicSQL-- create tables cursorOPENcurAllTablesInDBFETCHNEXTFROMcurAllTablesInDBINTO@TableSchema,@TableNameWHILE(@@FETCH_STATUS=0)BEGINSET@DynamicSQL='ALTER INDEX ALL ON '+@TableSchema+'.['+@TableName+']'+' REBUILD WITH (FILLFACTOR = '+CONVERT(VARCHAR,@FILLFACTOR)+')'-- PRINT @DynamicSQLEXECsp_executeSQL@DynamicSQLFETCHNEXTFROMcurAllTablesInDBINTO@TableSchema,@TableNameEND-- cursor WHILECLOSEcurAllTablesInDBDEALLOCATEcurAllTablesInDBEND
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.