Sql-Server

如何將所有非唯一和非聚集索引移動到不同的文件組?

  • June 22, 2012

我想將所有索引移動到單獨的硬碟驅動器。為此,我創建了一個新文件組,然後向其中添加了一個新文件(例如alter database foo add file(...) to FileGroup)。

現在我想將所有索引移動到這個新文件組。事實證明,我不能用來ALTER INDEX 在文件組之間移動索引。而且我也不能移動 PK 或唯一索引,以免我想移動表本身(我沒有),所以這些都出來了。所以,至少,我想移動其餘的索引。

我正在努力尋找一種將所有符合條件的索引從一個文件組移動到另一個文件組的方法。有沒有合理的自動化方式來做到這一點?

找到了答案。請參閱有關如何使其適用於 SQL Server 2005 的評論。

創建一個新的文件組和文件,重建文件組上的索引。

在這種情況下,我的索引實際上在文件組 PRIMARY 上,我將它移到新文件組

$$ TEST $$. 刪除並重新創建索引,對於重新創建,重要的是向 sql server 提供儲存新索引的資訊。就我而言$$ TEST $$.

USE [ShrinkIsBed]
GO

IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[FirstTable]') AND name = N'NX_TEST')
DROP INDEX [NX_TEST] ON [dbo].[FirstTable] WITH ( ONLINE = OFF )
GO

USE [ShrinkIsBed]
GO

CREATE NONCLUSTERED INDEX [NX_TEST] ON [dbo].[FirstTable] 
(
   [FirstName] ASC,
   [LastName] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) **ON [TEST]**
GO

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