索引碎片如何產生,請移步至《 T-SQL查詢高級—SQL Server索引中的碎片和填充因子》
導致填充度過低的可能原因:①.有刪除 ②.有分區表 ③.聚集索引不是數字 ④.數據百萬以內,比較少
ALTER INDEX <name of index> ON <table or view name> REBUILD WITH (ONLINE = ON,MAXDOP = 4)
ONLINE:在線執行,減少重建過程中的鎖 (執行時間延長)
MAXDOP :手動配置用於運行索引語句的最大處理器數
指定服務器根據當前系統工作負荷確定所使用的 CPU 數目。這是默認值,還是推薦設置。
1取消生成並行計劃。操作將以串行方式執行。
2-64
將處理器的數量限制為指定的值。根據當前工作負荷,可能使用較少的處理器。如果指定的值大於可用的 CPU 數量,將使用實際可用的 CPU 數量。
對於碎片的解決辦法 (引用自:宋沄劍 SQL Server索引中的碎片和填充因子)
基本上所有解決辦法都是基於對索引的重建和整理,只是方式不同
1.刪除索引並重建
這種方式並不好.在刪除索引期間,索引不可用.會導致阻塞發生。而對於刪除聚集索引,則會導致對應的非聚集索引重建兩次(刪除時重建,建立時再重建).雖然這種方法並不好,但是對於索引的整理最為有效
2.使用DROP_EXISTING語句重建索引
為了避免重建兩次索引,使用DROP_EXISTING語句重建索引,因為這個語句是原子性的,不會導致非聚集索引重建兩次,但同樣的,這種方式也會造成阻塞
3.如前面文章所示,使用ALTER INDEX REBUILD語句重建索引
使用這個語句同樣也是重建索引,但是通過動態重建索引而不需要卸載並重建索引.是優於前兩種方法的,但依舊會造成阻塞。可以通過ONLINE關鍵字減少鎖,但會造成重建時間加長.
4.使用ALTER INDEX REORGANIZE
這種方式不會重建索引,也不會生成新的頁,僅僅是整理,當遇到加鎖的頁時跳過,所以不會造成阻塞。但同時,整理效果會差於前三種.