SQL Server 索引维护sql语句
2009-08-11 00:00
218 查看
使用以下脚本查看数据库索引碎片的大小情况:
以下使用脚本来处理维护作业:
DBCC SHOWCONTIG WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS
以下使用脚本来处理维护作业:
/*Perform a 'USE <database name>' to select the database in which to run the script.*/ -- Declare variables SET NOCOUNT ON; DECLARE @tablename varchar(255); DECLARE @execstr varchar(400); DECLARE @objectid int; Declare @IndexName varchar(500); DECLARE @indexid int; DECLARE @frag decimal; DECLARE @maxfrag decimal; DECLARE @TmpName varchar(500); -- Declare @TmpName ='' set @TmpName = '' -- Decide on the maximum fragmentation to allow for. SELECT @maxfrag = 30.0; -- Declare a cursor. DECLARE tables CURSOR FOR SELECT TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'; -- Create the 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, Extents int, ExtentSwitches int, AvgFreeBytes int, AvgPageDensity int, ScanDensity decimal, BestCount int, ActualCount int, LogicalFrag decimal, ExtentFrag decimal); -- Open the cursor. OPEN tables; -- Loop through all the tables in the database. FETCH NEXT FROM tables INTO @tablename; WHILE @@FETCH_STATUS = 0 BEGIN; -- Do the showcontig of all indexes of the table INSERT INTO #fraglist EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS'); FETCH NEXT FROM tables INTO @tablename; END; -- Close and deallocate the cursor. CLOSE tables; DEALLOCATE tables; -- Declare the cursor for the list of indexes to be defragged. DECLARE indexes CURSOR FOR SELECT ObjectName, ObjectId,IndexName,IndexId, LogicalFrag FROM #fraglist WHERE INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0; -- Open the cursor. OPEN indexes; -- Loop through the indexes. FETCH NEXT FROM indexes INTO @tablename, @objectid, @IndexName,@indexid, @frag; WHILE @@FETCH_STATUS = 0 BEGIN; if @frag < @maxfrag Begin SELECT @execstr = 'ALTER INDEX [' + RTRIM(@IndexName) + '] ON [' + RTRIM(@tablename) + '] REORGANIZE WITH ( LOB_COMPACTION = ON ) ' print @maxfrag + ' ' + @execstr End else Begin SELECT @execstr = 'ALTER INDEX [' + RTRIM(@IndexName) + '] ON [' + RTRIM(@tablename) + '] REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = OFF, ONLINE = OFF )' print @maxfrag + ' ' + @execstr End EXEC (@execstr); --更新统计信息 IF @TmpName<>@tablename BEGIN SET @tmpName=@tableName PRINT 'UPDATE STATISTICS '+@TableName + ' WITH FULLSCAN ' EXEC ('UPDATE STATISTICS '+@TableName + ' WITH FULLSCAN ') END FETCH NEXT FROM indexes INTO @tablename, @objectid, @IndexName,@indexid, @frag; END; -- Close and deallocate the cursor. CLOSE indexes; DEALLOCATE indexes; -- Delete the temporary table. DROP TABLE #fraglist; GO
相关文章推荐
- SQL Server 索引维护sql语句
- SQL Server 索引维护sql语句
- SQL Server SQL语句索引监控
- SQL SERVER 使用索引调优 Transaction Sql 语句
- [转] SQL Server 2005索引碎片整理SQL语句
- SQL SERVER 查看SQL语句IO,时间,索引消耗
- 【转】SQL SERVER 查看SQL语句IO,时间,索引消耗
- SQL SERVER 索引中聚集索引分析和Transact-SQL语句优化
- SQL SERVER 查看SQL语句IO,时间,索引消耗
- Sql Server 索引使用情况及优化的相关Sql语句分享
- SQL Server 索引使用分析(2)- 改善SQL语句,防止索引失效
- sql语句在sql server中查询每个表的记录数,占用的空间,索引占用的空间等
- SQL Server 索引结构及其使用(二) 改善SQL语句第1/3页
- SQL Server 索引使用分析(2)- 改善SQL语句,防止索引失效
- [转] SQL Server 2005索引碎片整理SQL语句
- 使用SQL语句为SQL Server 2005创建全文索引
- [SQL Server]利用索引改善sql语句
- SQL Server 2005索引碎片整理SQL语句
- SQL Server 索引结构及其使用(二) 改善SQL语句第1/3页