SQL SERVER 2008 R2 重建索引的方法
更新時(shí)間:2014年07月06日 00:53:53 投稿:mdxy-dxy
項(xiàng)目升級(jí)數(shù)據(jù)庫由SQL2000升級(jí)到2008R2,今天對(duì)數(shù)據(jù)庫表進(jìn)行碎片掃描,發(fā)現(xiàn)有些表碎片較大,于是決定重建索引,MSDN聯(lián)機(jī)幫助是最好的老師,將相關(guā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)機(jī)幫助) 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
相關(guān)文章
SQL Server 2008怎樣添加自增列實(shí)現(xiàn)自增序號(hào)
有的表需要添加自增列,在添加新紀(jì)錄時(shí)自動(dòng)添加一個(gè)序號(hào),有兩種不錯(cuò)的方法通過T-SQL代碼、通過企業(yè)管理器在此分享給大家2013-09-09
SQL Server 2008中的代碼安全(二) DDL觸發(fā)器與登錄觸發(fā)器
MicrosoftSQL Server 提供兩種主要機(jī)制來強(qiáng)制使用業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器。觸發(fā)器為特殊類型的存儲(chǔ)過程,可在執(zhí)行語言事件時(shí)自動(dòng)生效。SQL Server 包括三種常規(guī)類型的觸發(fā)器:DML 觸發(fā)器、DDL 觸發(fā)器和登錄觸發(fā)器。2011-06-06
使用Sqlserver事務(wù)發(fā)布實(shí)現(xiàn)數(shù)據(jù)同步(sql2008)
事務(wù)的功能在sqlserver中由來已久,因?yàn)樽罱谧鲆粋€(gè)數(shù)據(jù)同步方案,所以有機(jī)會(huì)再次研究一下它以及快照等,發(fā)現(xiàn)還是有很多不錯(cuò)的功能和改進(jìn)的。這里以sqlserver2008的事務(wù)發(fā)布功能為例,對(duì)發(fā)布訂閱的方式簡要介紹一下操作流程,一方面做個(gè)總結(jié)備份,一方面與大家進(jìn)行一下分享和交流2013-03-03
SQL Server 2008R2編寫腳本時(shí)智能提示功能丟失的處理方法
SQL Server 2008R2中增加了新的智能提示的功能簡化了輸入,非常方便。但突然有一天智能提示沒有了,好郁悶2012-07-07

