以前は、datetime
列createdをテーブルの不適切なクラスター化インデックスとして選択しました。
今度は(実行プランに基づいて)ID identity主キーを外部キーとして頻繁に参照されるため、クラスター化されたキーとして選択する方がよいと結論しました。
現在のクラスター化キーを削除して新しいキーを作成したいのですが、full-text
インデックスがその主キーに依存しているため、主キーを削除できません。
主キーをクラスター化インデックスに切り替えるだけですか、それとも主キーとすべての依存オブジェクトのチェーンを削除する必要がありますか?
以下に、テーブル定義とクラスター化インデックス定義があります。
CREATE TABLE [dbo].[Realty](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Created] [datetime] NOT NULL,
....
CONSTRAINT [PK_Realty] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
...
CREATE CLUSTERED INDEX [Created] ON [dbo].[Realty]
(
[Created] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
既存のクラスター化インデックスを削除してから、ID
列に新しいインデックスを作成します。
_DROP INDEX [Created] ON dbo.Realty;
GO
CREATE UNIQUE CLUSTERED INDEX CX_Realty ON dbo.Realty (ID);
GO
_
もちろん、これは、メンテナンスウィンドウ中に行う必要があります。そうすれば、ブロッキングが過度に発生することはありません。 Enterprise Editionを使用している場合は、ステートメントにWITH (ONLINE=ON)
を追加することで、CREATE INDEX操作をオンラインで実行できます。