SQL SERVER 2008 R2 重建索引的方法
更新時間:2014年07月06日 00:53:53 投稿:mdxy-dxy
項目升級數(shù)據(jù)庫由SQL2000升級到2008R2,今天對數(shù)據(jù)庫表進行碎片掃描,發(fā)現(xiàn)有些表碎片較大,于是決定重建索引,MSDN聯(lián)機幫助是最好的老師,將相關腳本摘錄備后查
參考sys.dm_db_index_physical_stats
檢查索引碎片情況
1.SELECT 2.OBJECT_NAME(object_id) as objectname, 3.object_id AS objectid, 4.index_id AS indexid, 5.partition_number AS partitionnum, 6.avg_fragmentation_in_percent AS fra 7.FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘LIMITED') 8.WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0; 9. 10.使用腳本中的 sys.dm_db_index_physical_stats 重新生成或重新組織索引 (來源于聯(lián)機幫助) 11. 12.SET NOCOUNT ON; 13.DECLARE @objectid int; 14.DECLARE @indexid int; 15.DECLARE @partitioncount bigint; 16.DECLARE @schemaname nvarchar(130); 17.DECLARE @objectname nvarchar(130); 18.DECLARE @indexname nvarchar(130); 19.DECLARE @partitionnum bigint; 20.DECLARE @partitions bigint; 21.DECLARE @frag float; 22.DECLARE @command nvarchar(4000); 23.– Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function 24.– and convert object and index IDs to names. 25.SELECT 26.object_id AS objectid, 27.index_id AS indexid, 28.partition_number AS partitionnum, 29.avg_fragmentation_in_percent AS frag 30.INTO #work_to_do 31.FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘LIMITED') 32.WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0; 33.– Declare the cursor for the list of partitions to be processed. 34.DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do; 35.– Open the cursor. 36.OPEN partitions; 37.– Loop through the partitions. 38.WHILE (1=1) 39.BEGIN; 40.FETCH NEXT 41.FROM partitions 42.INTO @objectid, @indexid, @partitionnum, @frag; 43.IF @@FETCH_STATUS < 0 BREAK; 44.SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name) 45.FROM sys.objects AS o 46.JOIN sys.schemas as s ON s.schema_id = o.schema_id 47.WHERE o.object_id = @objectid; 48.SELECT @indexname = QUOTENAME(name) 49.FROM sys.indexes 50.WHERE object_id = @objectid AND index_id = @indexid; 51.SELECT @partitioncount = count (*) 52.FROM sys.partitions 53.WHERE object_id = @objectid AND index_id = @indexid; 54.– 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding. 55.IF @frag < 30.0 56.SET @command = N‘ALTER INDEX ‘ + @indexname + N‘ ON ‘ + @schemaname + N‘.' + @objectname + N‘ REORGANIZE'; 57.IF @frag >= 30.0 58.SET @command = N‘ALTER INDEX ‘ + @indexname + N‘ ON ‘ + @schemaname + N‘.' + @objectname + N‘ REBUILD'; 59.IF @partitioncount > 1 60.SET @command = @command + N‘ PARTITION=' + CAST(@partitionnum AS nvarchar(10)); 61.EXEC (@command); 62.PRINT N‘Executed: ‘ + @command; 63.END; 64.– Close and deallocate the cursor. 65.CLOSE partitions; 66.DEALLOCATE partitions; 67.– Drop the temporary table. 68.DROP TABLE #work_to_do; 69.GO
相關文章
SQL SERVER 2008數(shù)據(jù)庫引擎詳細介紹
SQL Server 的數(shù)據(jù)庫引擎組件是用于存儲、處理數(shù)據(jù)和保證數(shù)據(jù)安全的核心服務。數(shù)據(jù)庫引擎提供受控的訪問和快速事務處理,以滿足企業(yè)中要求極高、大量使用數(shù)據(jù)的應用程序的要求2012-11-11SQL Server 2008存儲結構之GAM、SGAM介紹
談到GAM和SGAM,我們不得不從數(shù)據(jù)庫的頁和區(qū)說起。一個數(shù)據(jù)庫由用戶定義的空間構成,這些空間用來永久存儲用戶對象,例如數(shù)據(jù)庫管理信息、表和索引。這些空間被分配在一個或多個操作系統(tǒng)文件中2012-08-08SQL SERVER 2008 CTE生成結點的FullPath
SQL SERVER 2008 使用CTE是經(jīng)常的事兒,有時我們想存儲一些冗余數(shù)據(jù),像每個結點的FullPath。2011-10-10SQLServer 2008中SQL增強之一:Values新用途
SQL Server 2008中新增功能:可以使用單個Insert命令插入多行2011-05-05SQLServer 2008中的代碼安全(五) 非對稱密鑰加密
非對稱密鑰包含數(shù)據(jù)庫級的內(nèi)部公鑰和私鑰,它可以用來加密和解密SQL Server數(shù)據(jù)庫中的數(shù)據(jù),它可以從外部文件或程序集中導入,也可以在SQL Server數(shù)據(jù)庫中生成。2011-06-06SQL Server 2008 R2占用cpu、內(nèi)存越來越大的兩種解決方法
這篇文章主要介紹了SQL Server 2008 R2占用內(nèi)存越來越大的兩種解決方法,需要的朋友可以參考下2017-10-10sql?server?2008數(shù)據(jù)庫不能添加附加文件的解決方法
這篇文章主要介紹了sql?server?2008數(shù)據(jù)庫不能添加附加文件的解決方法,需要的朋友可以參考下2023-02-02SQL Server復制需要有實際的服務器名稱才能連接到服務器
服務器上安裝的WIN2008 R2,然后沒有在意機器名,安裝了SQL2008 R2數(shù)據(jù)庫之后,配置AD域的時候修改了機器名2013-11-11