程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> MSSQL 重建索引(在線重建、控制最大處理器數 、MAXDOP )

MSSQL 重建索引(在線重建、控制最大處理器數 、MAXDOP )

編輯:關於SqlServer

一、什麼情況下需要重建索引

1、碎片過多(參考值:>20%)

索引碎片如何產生,請移步至《 T-SQL查詢高級—SQL Server索引中的碎片和填充因子》

2、填充度過低(參考值:<75%)

導致填充度過低的可能原因:①.有刪除 ②.有分區表 ③.聚集索引不是數字 ④.數據百萬以內,比較少

二、重建索引

ALTER INDEX <name of index> ON <table or view name> REBUILD WITH (ONLINE = ON,MAXDOP = 4)

ONLINE:在線執行,減少重建過程中的鎖 (執行時間延長)

MAXDOP :手動配置用於運行索引語句的最大處理器數

值說明 0

指定服務器根據當前系統工作負荷確定所使用的 CPU 數目。這是默認值,還是推薦設置。

1

取消生成並行計劃。操作將以串行方式執行。

2-64

將處理器的數量限制為指定的值。根據當前工作負荷,可能使用較少的處理器。如果指定的值大於可用的 CPU 數量,將使用實際可用的 CPU 數量。


 


三、擴展筆記:

對於碎片的解決辦法 (引用自:宋沄劍 SQL Server索引中的碎片和填充因子)

    基本上所有解決辦法都是基於對索引的重建和整理,只是方式不同

    1.刪除索引並重建

       這種方式並不好.在刪除索引期間,索引不可用.會導致阻塞發生。而對於刪除聚集索引,則會導致對應的非聚集索引重建兩次(刪除時重建,建立時再重建).雖然這種方法並不好,但是對於索引的整理最為有效

    2.使用DROP_EXISTING語句重建索引

       為了避免重建兩次索引,使用DROP_EXISTING語句重建索引,因為這個語句是原子性的,不會導致非聚集索引重建兩次,但同樣的,這種方式也會造成阻塞

    3.如前面文章所示,使用ALTER INDEX REBUILD語句重建索引

       使用這個語句同樣也是重建索引,但是通過動態重建索引而不需要卸載並重建索引.是優於前兩種方法的,但依舊會造成阻塞。可以通過ONLINE關鍵字減少鎖,但會造成重建時間加長.

    4.使用ALTER INDEX REORGANIZE

       這種方式不會重建索引,也不會生成新的頁,僅僅是整理,當遇到加鎖的頁時跳過,所以不會造成阻塞。但同時,整理效果會差於前三種.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved