Mark S.가 자신의 게시물에서 언급 한 내용에 대해 매우 중요한 메모를 추가합니다. 질문에 언급 된 특정 SQL 스크립트에서는 데이터 행과 인덱스 데이터 구조를 저장하기 위해 두 개의 다른 파일 그룹을 언급 할 수 없습니다.
그 이유는이 경우 생성되는 인덱스가 기본 키 열의 클러스터 된 인덱스이기 때문입니다. 클러스터 된 인덱스 데이터와 테이블의 데이터 행은 다른 파일 그룹에있을 수 없습니다 .
따라서 PRIMARY 및 SECONDARY와 같이 데이터베이스에 두 개의 파일 그룹이있는 경우 아래 언급 된 스크립트는 [SECONDARY]
테이블 데이터에 대해 다른 파일 그룹 ( )을 언급했지만 행 데이터와 클러스터 된 인덱스 데이터를 모두 PRIMARY 파일 그룹 자체에 저장합니다 . 더 흥미롭게도 스크립트는 성공적으로 실행됩니다 (두 개의 다른 파일 그룹을 제공했을 때 오류가 발생할 것으로 예상했을 때 : 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
비 클러스터형 인덱스를 다른 파일 그룹에 저장하면 쿼리 성능을 향상시키는 방법에 대한 자세한 정보를 얻을 수 있습니다. 다음 은 그러한 링크 중 하나입니다.