인덱스란
테이블에 있는 데이터를 빠르게 검색하기 위해 생성되는 객체입니다.
예를 들어 1억건이 들어있는 테이블에서 A 라는 key 를 찾기 위해서는 1억건을 모두 조회해야 합니다.
그러나 인덱스가 있는 경우에는 b-tree 기법을 사용하여 A key 를 더 빠르게 찾을 수 있습니다.
인덱스를 생성하는 방법
인덱스는 테이블을 생성할 때 묶어서도 생성할 수 있지만 여기에서는 인덱스만을 생성하는 방법을 다룹니다.
인덱스는 여러 종류가 있습니다. Primary, Unique, Normal 방식이 있으며 Clustered 와 Non-Clustered 로 나뉩니다.
이 포스팅에서는 위의 개념들을 다루지는 않겠습니다.
인덱스는 테이블을 기반으로 생성하기 때문에, 아래와 같은 테이블이 있는 상태에서 진행합니다.
1
|
CREATE TABLE t1 ( c1 INT, c2 INT, c3 INT NOT NULL )
|
cs |
Normal 인덱스 생성하는 방법
일반 인덱스는 기본적으로 넌클러스터 모드로 생성됩니다.
클러스터로 생성을 원하는 경우 CLUSTERED 를 명시해 주세요.
특정 파일그룹에 생성을 원하는 경우에는 마지막 ON 절에 원하는 파일그룹명을 작성해 줍니다.
1
2
3
|
CREATE INDEX idx_t1 ON dbo.t1 (c1 ASC) ON [PRIMARY];
CREATE CLUSTERED INDEX idx_t1 ON dbo.t1 (c1 ASC);
|
cs |
Unique 인덱스 생성하는 방법
Unique 인덱스는 기본적으로 넌클러스터 모드로 생성됩니다.
클러스터로 생성을 원하는 경우 CLUSTERED 를 명시해 주세요.
1
2
3
|
CREATE UNIQUE INDEX idx_t2 ON dbo.t1 (c2);
CREATE UNIQUE CLUSTERED INDEX idx_t2 ON dbo.t1 (c2);
|
cs |
Primary 인덱스 생성하는 방법
Primary 인덱스는 CREATE 방식으로 생성하지 않습니다.
ALTER TABLE 구문에 제약사항을 추가하는 방식으로 사용하고 기본적으로 CLUSTERED 모드로 생성됩니다.
넌클러스터로 생성을 원하는 경우에는 NONCLUSTERED 를 명시해 주세요.
1
2
3
|
ALTER TABLE dbo.t1 ADD CONSTRAINT idx_t3 PRIMARY KEY (c3);
ALTER TABLE dbo.t1 ADD CONSTRAINT idx_t3 PRIMARY KEY NONCLUSTERED (c3);
|
cs |
인덱스를 수정하는 방법
ALTER 구문으로 인덱스의 컬럼 혹은 정렬을 수정할 수는 없습니다.
인덱스의 속성인 REBUILD, REORGANIZE, SET 등을 할 수 있으며 여기에서는 다루지 않겠습니다.
인덱스를 삭제하는 방법
인덱스를 삭제할 때는 CLUSTERED 와 NONCLUSTERED 모드를 구분하지 않고 삭제가 가능합니다.
Normal 인덱스 삭제하는 방법
1
|
DROP INDEX idx_t1 ON dbo.t1;
|
cs |
Unique 인덱스 삭제하는 방법
1
|
DROP INDEX idx_t2 ON dbo.t1
|
cs |
Primary 인덱스 삭제하는 방법
1
|
ALTER TABLE dbo.t1 DROP CONSTRAINT idx_t3
|
cs |
SQL Server 인덱스 생성
SQL Server 인덱스 삭제
SQL Server 인덱스 수정
'SQL Server > SQL Server 기본기' 카테고리의 다른 글
[MSSQL] 데이터베이스 생성, 수정, 삭제 방법 (0) | 2021.06.12 |
---|---|
[MSSQL] 테이블 생성, 수정, 조회, 삭제하는 방법 (0) | 2020.11.11 |
[MSSQL] 프로시저 생성, 수정, 조회, 삭제, 호출하는 방법 (2) | 2020.11.10 |