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
참고 : 인덱스가 생성되는 경우에만 다른 파일 그룹에 상주 할 수 있습니다 귀하의 인덱스는 클러스터되지 않은 자연을입니다.
테이블 데이터가 이미 [PRIMARY]
파일 그룹에있는 대신 할 때 클러스터되지 않은 인덱스가 [SECONDARY]
파일 그룹에 생성 얻을 것이다 생성 아래 스크립트 : 당신은 어떻게 비 저장에 대한 자세한 정보를 얻을 수 있습니다
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
다른 파일 그룹에 클러스터 된 인덱스를 사용하면 쿼리 성능이 향상됩니다. Here은 그러한 링크 중 하나입니다.
출처
2016-08-12 10:14:07
RBT
이것은 일반적으로 ** 쓸모없고 스크립트에서 안전하게 제거 할 수 있음을 의미합니다 **. – MGOwen
예, 같은 방법으로 변수 초기화를 0과 false로 생략 할 수 있습니다. 단지 기본값이기 때문입니다. 맞습니까? –
@ MarkSowul이 기능을 사용하여 성능을 최적화해야하는 좋은 이유가 없으면이를 생략하고 기본값을 사용하는 것이 좋습니다. (따라서 "일반적으로"MGOwen이 포함됩니다.) 변수를 '0'또는 'false'로 초기화하는 것은 코드가 알려진 상태에서 작동하는지 확인하는 것입니다. 이는 논리적이고 정확성의 문제이며 최적화 문제가 아닙니다. – jpmc26