Sql-Server
SQL Server 如何減少索引碎片?
如果使用者從未在其數據庫上執行
REBUILD
或執行過,SQL Server 是否仍會以某種方式對索引進行碎片整理?REORGANIZE
MSDN 建議,如果索引碎片超過 30%,建議執行
REBUILD
而不是REORGANIZE
. 執行REORGANIZE
多次會做同樣的事情REBUILD
嗎?我想知道這一點,因為我有一個具有高度碎片化索引的客戶端。他們
REORGANIZE
每個週末都針對該索引執行,並且隨著時間的推移,他們的索引似乎變得碎片整理。這有意義嗎?
不,沒有自動神奇的索引碎片整理。如果你有碎片,你需要
REBUILD
orREORGANIZE
。重新組織索引通過對頁面進行物理重新排序以匹配邏輯順序來對索引的葉級別進行碎片整理。鎖定持續時間很短,並且會導致最小的查詢阻塞。
Rebuild 刪除一個索引並建構一個新索引。對於企業版,如果索引不包含任何 LOB 類型,這可以作為線上操作完成。對於標準版或存在 LOB 類型的地方,它會導致阻塞。有關聯機重建如何與使用者操作同時發生的說明,請參閱聯機索引操作的工作原理。
Reorganize vs Rebuild 建議大致是通過重組進行碎片整理所需的工作量與重建相當的門檻值,即 > 30% 的碎片與重建相比,完成重組需要更多資源和更長的執行時間。
多次重組執行不會進一步對索引進行碎片整理。