Sql-Server
索引選項和對索引應用分區
我有以下兩個問題:
- 我有一個帶有以下選項的 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_TEMPDB
,ONLINE
等)僅指定為執行時 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 不會考慮現有索引
FILLFACTOR
,CREATE 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。當然,拆分非空分區是相當昂貴的。