[1 차]는 무엇을 의미합니까?


237

SQL 설정 스크립트를 만들고 있는데 다른 사람의 스크립트를 예로 사용하고 있습니다. 다음은 스크립트의 예입니다.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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 [PRIMARY]
GO

ON [PRIMARY] 명령의 기능을 아는 사람이 있습니까?

답변:


248

Microsoft SQL Server에서 데이터베이스를 작성할 때 여러 위치, 디렉토리 또는 디스크에 스토리지가 작성되는 여러 파일 그룹이있을 수 있습니다. 각 파일 그룹의 이름을 지정할 수 있습니다. PRIMARY 파일 그룹은 항상 생성되는 기본 그룹이므로 제공된 SQL은 PRIMARY 파일 그룹에 테이블을 생성합니다.

전체 구문 은 MSDN 을 참조하십시오 .


153
이것은 또한 일반적으로 쓸모가 없으며 스크립트에서 안전하게 제거 할 수 있음을 의미합니다 .
MGOwen

예, 같은 방법으로 변수 초기화를 0으로 생략하고 false로 설정할 수 있습니다. 기본 설정이기 때문입니다.
Mark Sowul

12
@MarkSowul 성능을 최적화하기 위해 이것을 사용해야 할 합당한 이유가 없다면,이를 생략하고 기본값을 사용하는 것이 좋습니다. (따라서 "보통"MGOwen이 포함되었습니다.) 변수를 초기화 0하거나 false코드가 알려진 상태에서 작동하도록하는 것입니다. 이는 최적화 문제가 아닌 논리 및 정확성 문제입니다.
jpmc26

3
내가 볼 ON PRIMARY스크립트에 두 번 구문 - 테이블 제약 조건에 대한 테이블에 대한 하나의 또 다른. 스토리지 측면에서 테이블 제한 조건의 경우 무엇을 의미합니까? 그것은 나에게 부적절하거나 중복되는 것처럼 들린다. 구문 적으로 테이블 수준에서 한 번만 언급하면 ​​충분하거나 PRIMARY 파일 그룹에 테이블을 저장하고 비 PRIMARY 파일 그룹에 테이블 제약 조건 데이터를 실제로 저장할 수 있습니까?
RBT

1
실제 MSDN 링크 는 다음과 같습니다 . 답변의 답변이 더 이상 작동하지 않아 게시물을 수정할 수 없습니다!
shekhar

38

생성중인 객체가있는 파일 그룹을 나타냅니다. 따라서 기본 파일 그룹은 서버의 D : \ 드라이브에있을 수 있습니다. 그런 다음 Indexes라는 다른 파일 그룹을 만들 수 있습니다. 이 파일 그룹은 서버의 E : \ 드라이브에있을 수 있습니다.


PRIMARY 파일 그룹에 테이블을 저장하고 다른 파일 그룹에 테이블 제약 조건 또는 인덱스 데이터 구조를 저장하면 성능에 부정적인 영향을 미칩니 까?
RBT

@RBT이 영향을 미칠 수있는 변수를 많이하고, "그것은 의존하지만 ..."를 참조로 시작됩니다 답변 일반적으로 많이 있습니다 dba.stackexchange.com/questions/2626/... 및 관련 질문
codingbadger

16

ON [PRIMARY]는 "Primary"파일 그룹에 구조를 만듭니다. 이 경우 기본 키 인덱스와 테이블은 데이터베이스의 "기본"파일 그룹에 배치됩니다.


7

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

비 클러스터형 인덱스를 다른 파일 그룹에 저장하면 쿼리 성능을 향상시키는 방법에 대한 자세한 정보를 얻을 수 있습니다. 다음 은 그러한 링크 중 하나입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.