實用SQL: 通過向表加clusted索引重整資料庫

來源:互聯網
上載者:User
資料|資料庫|索引
--
--   ArrangeDB.SQL 重整資料庫
--
--   CopyRights @2003.12.29 Digital China Management System Co., Ltd.
--
-- 重整流程:把所有使用者表增加 clustered 索引,這樣SQL SERVER會重整表,然後
-- 再刪除索引
--
-- 使用時機:日常維護,建議每周做一次重整。
--
-- 注意事項:做完後請做資料庫收縮,更新統計,重新索引,及完整性檢查 

--drop table #dcms_index_info
--要用到的暫存資料表
create table #dcms_index_info
(
  index_name sysname,
  index_description varchar(210),
  index_keys varchar(2078)
)

--設定環境
set NOCOUNT ON
--程式開始:變數
declare @sql varchar(500)
declare @TableName varchar(20)
declare @ErrorSave int

--用所有的使用者表處理
declare Cursor1 Cursor
for
 select name from sysobjects where xtype='U' order by name

open Cursor1
fetch next from Cursor1 into @TableName

while @@fetch_status = 0
begin
 --為了檢測表中是不是有CREATE_DATE這個列,易飛的表中都有,如果沒有就跳過,不過處理
 --應該還有更好的方法,我暫時這樣用了。不想用sp_columns因為不想建表,慢就慢點吧
 if COLUMNPROPERTY(OBJECT_ID(@TableName),'CREATE_DATE','PRECISION') is not null
 begin
  print 'process table ' + @TableName

  --取得當前表的索引資訊
  delete #dcms_index_info
  set @sql = ' sp_helpindex ''' + @TableName + ''' '
  insert into #dcms_index_info exec (@sql)

  --尋找是不是已經有聚簇索引(clustered),如果已經有了就不做,在易飛中有clustered索引是少數
  select index_name from #dcms_index_info where index_description like 'clustered%'

  if @@ROWCOUNT = 0
  begin
   set @sql = ' create clustered index DcTempIndex001 on ' + @TableName + ' ( CREATE_DATE ) '
   exec (@sql)

   set @sql = ' DROP index ' + @TableName + '.DcTempIndex001 '
   exec (@sql)
  end
 end

 fetch next from Cursor1 into @TableName
end
 
drop table #dcms_index_info
close Cursor1
deallocate Cursor1



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。