數據庫.Sqlserver.重建索引


什么情況下需要重建索引

都和碎片有關系,總結就是一高(高於20%)一低(低於75%),高不成低不就
1.碎片總計過高
參考值→碎片.碎片總計 > 20%

2.碎片填充度過低
參考值→碎片.頁填充度 < 75%
導致頁填充度過低的可能原因:

[
	"1.有刪除",
	"2.有分區表",
	"3.聚集索引不是數字",
	"4.數據比較少(百萬以內)"
]

[注意.缺少一張圖]

重建索引

ALTER INDEX <name of index> ON <table or view name> 
REBUILD WITH (ONLINE = ON,MAXDOP = 4)
{
	"ONLINE":
	{
		"描述":"是否在線執行",
		"ON":"在線執行,減少重建過程中的鎖(執行時間延長)",
		"OFF":"離線執行"
	},
	"MAXDOP":
	{
		"描述":"手動配置用於運行索引語句的最大處理器數",
		"0":"指定服務器根據當前系統工作負荷確定所使用的 CPU 數目.這是默認值,還是推薦設置",
		"1":"取消生成並行計划,操作將以串行方式執行",
		"2~64":"將處理器的數量限制為指定的值.根據當前工作負荷,可能使用較少的處理器.如果指定的值大於可用的CPU數量,將使用實際可用的CPU數量"
	}
}

--查找碎片率大於40
SELECT 
	object_name(object_id),
	index_type_desc,
	alloc_unit_type_desc,
	avg_fragmentation_in_percent,
	fragment_count,
	avg_fragment_size_in_pages,
	page_count,
	record_count,
	avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID('DBNAME'),OBJECT_ID(''),NULL,NULL,'Sampled')  
WHERE avg_fragmentation_in_percent>40

Sqlserver數據庫的好多設置我們都忽略了,
我們日常只是更多的在寫SQL語句,
我們可以考慮下升級我們的Sqlserver數據庫版本,
優化我們的SQL語句,
深挖在這些SQL語句深處的一些低層知識.

擴展:

第一個階段為新索引簡單夠造一顆空B+樹...
第二階段包括由掃描表來獲得每行的索引列,對行排序並將它們插入新的B+樹中...
最后階段涉及更新目錄以示索引創建已經完成,且索引對查詢是可用的.

  • ...

各個情況

  • 在線創建索引Vs離線創建索引
  • 創建索引的時候.表已經存在數據Vs表還沒有數據

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM