0
我有多個索引視圖,我想從主文件組移動到另一個文件組,對性能影響最小。我怎樣才能做到這一點?將索引視圖移動到單獨的文件組
我有多個索引視圖,我想從主文件組移動到另一個文件組,對性能影響最小。我怎樣才能做到這一點?將索引視圖移動到單獨的文件組
這應該生成腳本來做你想做的事情,包括聚集索引和任何非聚集索引。我已經添加了ONLINE = ON
選項以最大限度地減少對現有工作負載的影響,但從理論上講,您的索引視圖不應該很大,因此不應該有太大的影響。當然,這個選項只能在Enterprise Edition中使用,腳本可以處理它。如果你不能在線完成,你肯定會想要用模擬工作負載來測試這種影響(並且無論如何你都會首先在測試環境中測試這個操作)。而且,您最好將這項工作安排在相對停工期,或者最好是維護時段。
DECLARE @opt NVARCHAR(13), @sql NVARCHAR(MAX), @fg NVARCHAR(128);
SELECT @fg = N'OtherFileGroupName', -- please fix this
@sql = N'',
@opt = CASE WHEN CONVERT(NVARCHAR(32), SERVERPROPERTY('Edition'))
LIKE N'Enterprise%' THEN N', ONLINE = ON' ELSE N'' END;
SELECT @sql = @sql + N'
CREATE ' + CASE WHEN i.index_id = 1
THEN 'UNIQUE CLUSTERED'
ELSE '' END
+ ' INDEX ' + QUOTENAME(i.name)
+ ' ON ' + QUOTENAME(SCHEMA_NAME(v.[schema_id]))
+ '.' + QUOTENAME(v.name)
+ '(' + STUFF((SELECT ',' + QUOTENAME(c.name)
FROM sys.columns AS c
INNER JOIN sys.index_columns AS ic
ON c.[object_id] = ic.[object_id]
AND c.column_id = ic.column_id
WHERE c.[object_id] = v.[object_id]
AND ic.index_id = i.index_id
FOR XML PATH, TYPE).value('.[1]', 'nvarchar(max)'),1,1,'')
+ ')
WITH (DROP_EXISTING = ON' + @opt + ')
ON ' + QUOTENAME(@fg) + ';'
FROM sys.views AS v
INNER JOIN sys.indexes AS i
ON v.[object_id] = i.[object_id]
ORDER BY i.index_id;
SELECT @sql;
-- EXEC sp_executesql @sql;
這應該產生一個腳本,如:
CREATE UNIQUE CLUSTERED INDEX [x]
ON [dbo].[splunge_view]([id])
WITH (DROP_EXISTING = ON, ONLINE = ON)
ON [OtherFileGroupName];
CREATE INDEX [y]
ON [dbo].[splunge_view]([c],[id])
WITH (DROP_EXISTING = ON, ONLINE = ON)
ON [OtherFileGroupName];
...
當你高興的SELECT
輸出(最適合在results to text
模式,但仍僅限於8K那裏,只有當你改變設置在tools/options
),取消註釋EXEC
。但是,再次,在一個測試環境中!
Betrand:+1非常感謝。 –