Sql-Server

索引選項和對索引應用分區

  • March 22, 2019

我有以下兩個問題:

  1. 我有一個帶有以下選項的 SQL Server 索引:
PAD_INDEX = OFF
STATISTICS_NORECOMPUTE = OFF
SORT_IN_TEMPDB = OFF
DROP_EXISTING = OFF
ONLINE = OFF
ALLOW_ROW_LOCKS = ON
ALLOW_PAGE_LOCKS = ON
FILLFACTOR = 70

這些詳細資訊儲存在數據庫中的什麼位置?我找到了類似的表格sys.indexes以及sys.stats其中一些選項的儲存位置。如果可能的話,我需要完整的清單。 2. 要在 SQL Server 中對索引進行分區,我們需要將其刪除並通過將其與分區方案相關聯來重新創建它。這是在現有索引上應用分區的唯一方法嗎?

並非所有索引創建選項都作為元數據保留;這些(例如SORT_IN_TEMPDBONLINE等)僅指定為執行時 DDL 選項。

與其完全刪除並重新創建索引,不如使用CREATE INDEX...WITH (DROP_EXISTING=ON).

CREATE INDEX YourTable_Index ON dbo.YourTable(IndexColumn)
   WITH (DROP_EXISTING=ON) ON PS_YourTable(PartitioningColumn);

編輯:

請注意,SQL Server 不會考慮現有索引FILLFACTORCREATE INDEX...DROP_EXISTING=ON因為創建了新索引。雖然,現有索引FILLFACTOR可以與ALTER INDEX...REBUILD(通過省略FILLFACTOR子句)一起使用,但該方法不允許更改分區或文件組,而CREATE INDEX...DROP_EXISTING=ON可以並避免在索引重新創建期間對行進行排序。當需要非預設值時FILLFACTOR,需要明確指定所需的值。CREATE INDEX...DROP_EXISTING=ON

如果要保留舊索引FILLFACTOR(以及原始索引的其他持久選項)而不手動指定值,則需要動態生成 DDL。

您還可以 ALTER TABLE SWITCH 將表及其所有索引從文件組移動到分區方案,您可以按照刪除和重命名。整個表必須適合映射到表的目前文件組的單個分區,因此這是一個僅元數據操作。但是新數據可以轉到其他分區,而原始分區以後可以進行 SPLIT。當然,拆分非空分區是相當昂貴的。

引用自:https://dba.stackexchange.com/questions/232599