Mark S.が彼の投稿で述べたことについて非常に重要なメモを追加します。質問で述べた特定のSQLスクリプトでは、データ行とインデックスデータ構造を格納するための2つの異なるファイルグループについて決して言及することはできません。
この理由は、この場合に作成されるインデックスは、主キー列のクラスター化インデックスであるためです。クラスタ化インデックスデータとテーブルのデータ行が異なるファイルグループに存在することはありません。
したがって、データベースに2つのファイルグループ(例:PRIMARYとSECONDARY)がある場合、以下のスクリプトは[SECONDARY]
、テーブルデータに別のファイルグループ()を指定した場合でも、行データとクラスター化インデックスデータの両方をPRIMARYファイルグループ自体に格納します。さらに興味深いことに、スクリプトも正常に実行されます(2つの異なるファイルグループ:Pを指定したため、エラーが発生すると予期していたとき)。SQL Serverは、舞台裏の裏技を静かにかつスマートに実行します。
CREATE TABLE [dbo].[be_Categories](
[CategoryID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_be_Categories_CategoryID] DEFAULT (newid()),
[CategoryName] [nvarchar](50) NULL,
[Description] [nvarchar](200) NULL,
[ParentID] [uniqueidentifier] NULL,
CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED
(
[CategoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [SECONDARY]
GO
注:作成するインデックスが本質的に非クラスター化である場合にのみ、インデックスを別のファイルグループに配置できます。
非クラスター化インデックスを作成する以下のスクリプト[SECONDARY]
は、テーブルデータが[PRIMARY]
ファイルグループに既に存在する場合、代わりにファイルグループに作成されます。
CREATE NONCLUSTERED INDEX [IX_Categories] ON [dbo].[be_Categories]
(
[CategoryName] 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) ON [Secondary]
GO
クラスター化されていないインデックスを別のファイルグループに保存することで、クエリのパフォーマンスを向上させる方法に関する詳細情報を取得できます。ここにそのようなリンクがあります。