본문 바로가기

SQL Server

CREATE INDEX

CREATE INDEX index1 ON schema1.table1 (column1);

CREATE CLUSTERED INDEX index1 ON database1.schema1.table1 (column1);

CREATE UNIQUE INDEX index1 ON schema1.table1 (column1 DESC, column2 ASC, column3 DESC);

인수

UNIQUE

테이블 또는 뷰에 고유 인덱스를 만듭니다. 고유 인덱스는 두 개의 행에 동일한 인덱스 키 값을 가질 수 없습니다. 뷰의 클러스터형 인덱스는 고유해야 합니다.

UNIQUE VS PRIMARY KEY  차이점 - NULL 입력 가능 여부

 

CLUSTERED

키 값의 논리적 순서가 테이블에 있는 해당 행의 물리적 순서를 결정하는 인덱스를 만듭니다. 클러스터형 인덱스의 최하위 수준인 리프 수준에는 테이블의 실제 데이터 행이 있습니다. 테이블 또는 뷰는 한 번에 클러스터형 인덱스 하나만 허용합니다.

비클러스터형 인덱스를 만들기 전에 항상 클러스터형 인덱스를 만듭니다. 테이블에 있는 기존의 비클러스터형 인덱스는 클러스터형 인덱스를 만들 때 다시 작성됩니다.

CLUSTERED를 지정하지 않으면 비클러스터형 인덱스가 만들어집니다.

 

NONCLUSTERED

테이블의 논리적 순서를 지정하는 인덱스를 만듭니다. 비클러스터형 인덱스에서는 데이터 행의 물리적 순서가 인덱싱된 순서와 다릅니다.

PRIMARY KEY 및 UNIQUE 제약 조건을 사용하여 암시적으로 만들거나 CREATE INDEX를 사용하여 명시적으로 만드는 등 인덱스를 만드는 방법과 관계없이 각 테이블에 비클러스터형 인덱스를 최대 999개까지 포함할 수 있습니다.

인덱싱된 뷰의 경우 비클러스터형 인덱스는 이미 고유 클러스터형 인덱스가 정의되어 있는 뷰에서만 만들 수 있습니다.

달리 지정하지 않으면 기본 인덱스 유형은 비클러스터형입니다.

index_name

인덱스의 이름입니다. 인덱스 이름은 테이블이나 뷰에서 고유해야 하지만 데이터베이스 내에서 고유할 필요는 없습니다. 인덱스 이름은 식별자 규칙을 따라야 합니다.

column

인덱스의 기준이 되는 열입니다. 지정된 열에 있는 결합된 값에 복합 인덱스를 만들려면 두 개 이상의 열 이름을 지정합니다. 복합 인덱스에 포함할 열을 table_or_view_name 다음의 괄호 안에 정렬 우선 순위 순서대로 나열합니다.

단일 복합 인덱스 키에 최대 32개의 열을 결합할 수 있으며 복합 인덱스 키의 모든 열은 동일한 테이블 또는 뷰에 있어야 합니다. 결합된 인덱스 값의 최대 허용 크기는 클러스터형 인덱스의 경우 900바이트, 비클러스터형 인덱스의 경우 1,700바이트입니다. 한도는 SQL Database 및 SQL Server 2016(13.x) 이전 버전의 경우 16열 및 900바이트입니다.

큰 개체(LOB) 데이터 형식 ntext, text, varchar(max), nvarchar(max), varbinary(max), xml 또는 image인 열은 인덱스의 키 열로 지정할 수 없습니다. 또한 CREATE INDEX 문에서 참조되지 않은 경우에도 ntext, text 또는 image 열은 뷰 정의에 포함할 수 없습니다.

 

[ ASC | DESC ]

특정 인덱스 열의 정렬 방향을 오름차순 또는 내림차순으로 지정합니다. 기본값은 ASC입니다.

INCLUDE (column [ ,... n ] )

비클러스터형 인덱스의 리프 수준에 키가 아닌 열을 추가하도록 지정합니다. 비클러스터형 인덱스는 고유하거나 고유하지 않을 수 있습니다.

결정적이면서 정확하거나 정확하지 않은 계산 열은 포괄 열이 될 수 있습니다. image, ntext, text, varchar(max) , nvarchar(max) , varbinary(max)  xml 데이터 형식에서 파생된 계산된 열은 해당 계산된 열 데이터 형식이 포함된 열로 허용된다면 키가 아닌 열에 포함할 수 있습니다. 

WHERE <filter_predicate>

인덱스에 포함할 행을 지정하여 필터링된 인덱스를 만듭니다. 필터링된 인덱스는 테이블의 비클러스터형 인덱스여야 합니다. 필터링된 인덱스의 데이터 행에 대한 필터링된 통계를 만듭니다.

필터 조건자는 간단한 비교 논리를 사용하며 계산 열, UDT 열, 공간 데이터 형식 열 또는 HierarchyID 데이터 형식 열을 참조할 수 없습니다. NULL 리터럴을 사용한 비교는 비교 연산자로 수행할 수 없습니다. 대신 IS NULL  IS NOT NULL 연산자를 사용합니다.

 

'SQL Server' 카테고리의 다른 글

temp table 사용시 recompile 발생 없이 사용하기  (0) 2023.02.10
FIRST_VALUE  (0) 2023.02.02
쿼리 수행 시간 체크  (0) 2023.01.26
일자(선분) 검색의 성능 개선  (0) 2023.01.20
SQL Server JSON 함수(Transact-SQL)  (0) 2023.01.11