Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server 인덱스 완벽 가이드: 생성, 이름 변경, 삭제 방법

이 글에서는 SQL Server에서 인덱스를 생성하고, 이름을 변경하며, 삭제하는 방법을 단계별로 자세히 알아봅니다.

SQL Server의 인덱스란?

인덱스(Index)는 데이터베이스에서 레코드를 더 빠르게 조회하기 위해 사용되는 핵심 기능입니다. 마치 책의 목차처럼, 인덱스는 인덱스가 적용된 열에 있는 각 값을 가리켜 원하는 데이터의 위치를 신속하게 찾을 수 있도록 도와줍니다.

인덱스 생성

기본 구문

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX ten_chimuc
ON ten_bang ( cot1 [ ASC | DESC ], ... cot_n [ ASC | DESC ] )
[ INCLUDE ( cot1, ... cot_n ) ]
[ WHERE dieu_kien ]
[ WITH (
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | STATISTICS_INCREMENTAL = { ON | OFF }
  | DROP_EXISTING = { ON | OFF }
  | ONLINE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = so_toida
  | DATA_COMPRESSION = { NONE | PAGE | ROW }
) ]
[ ON PARTITIONS ( { so | khoang } ) ]
[ ON scheme_phandoan ( cot )
| ON nhomtaptin | ON nhomtaptin_macdinh ]
[ FILESTREAM_ON { nhomtaptin | scheme_phandoan } ];

주요 매개변수 설명

  • UNIQUE: 선택 사항으로, 인덱스 열의 값 조합이 반드시 고유해야 함을 지정합니다.
  • CLUSTERED: 선택 사항으로, 테이블 내 행의 물리적 저장 순서를 결정하는 논리적 순서를 지정합니다. 즉, 인덱스 필드를 기준으로 테이블의 레코드가 정렬됩니다.
  • NONCLUSTERED: 선택 사항으로, 테이블 내 행의 물리적 저장 순서에는 영향을 주지 않는 논리적 순서를 지정합니다.
  • ten_chimuc: 생성하려는 인덱스의 이름입니다.
  • ten_bang: 인덱스가 생성될 테이블 또는 뷰(View)의 이름입니다.
  • cot1, ... cot_n: 인덱스를 구성하는 열입니다.
  • ASC | DESC: 해당 열 값의 정렬 순서(오름차순 또는 내림차순)를 지정합니다.
  • INCLUDE (cot1, ... cot_n): 선택 사항으로, 비클러스터형 인덱스의 리프(Leaf) 수준에 추가할 보조 열을 지정합니다.
  • WHERE dieu_kien: 선택 사항으로, 어떤 행을 인덱스에 포함할지 결정하는 필터 조건입니다.
  • ON scheme_phandoan (cot): 선택 사항으로, 파티션이 매핑될 파일 그룹(filegroup)을 결정하는 파티션 구성표를 지정합니다.
  • ON nhomtaptin: 선택 사항으로, 지정된 파일 그룹 위에 인덱스를 생성합니다.
  • ON nhomtaptin_macdinh: 선택 사항으로, 기본 파일 그룹을 지정합니다.
  • FILESTREAM_ON {nhomtaptin | scheme_phandoan}: 선택 사항으로, 클러스터형 인덱스의 FILESTREAM 데이터 위치를 지정합니다.

SQL Server 인덱스 생성 예제

다음은 단일 필드로 인덱스를 생성하는 기본적인 예제입니다.

CREATE INDEX danhba_chimuc
ON danhba (ho);

이 예제는 danhba 테이블에 ho라는 필드 하나로 구성된 danhba_chimuc라는 이름의 인덱스를 생성합니다.

두 개 이상의 필드로 복합 인덱스를 만들 수도 있습니다.

CREATE INDEX danhba_chimuc
ON danhba (ho, ten);

이 예제는 danhba 테이블에 hoten 두 개의 필드로 구성된 danhba_chimuc 인덱스를 생성합니다. 각 항목에 대해 ASC 또는 DESC를 명시하지 않으면, 인덱스는 기본값인 오름차순으로 생성됩니다.

내림차순으로 정렬하고 싶다면 다음과 같이 작성합니다.

CREATE INDEX danhba_chimuc
ON danhba (ho DESC, ten DESC);

위 CREATE INDEX 문은 성과 이름 모두 내림차순으로 정렬된 danhba_chimuc 인덱스를 생성합니다.

고유 인덱스(Unique Index) 예제

CREATE UNIQUE INDEX danhba_chimucduynhat
ON danhba (ho, ten);

이 예제는 danhba 테이블에 성과 이름 두 필드로 구성된 danhba_chimucduynhat이라는 고유 인덱스를 생성하며, 이 두 필드의 조합이 중복되지 않음을 보장합니다.

클러스터형 고유 인덱스를 생성하면, 테이블 내 행의 물리적 순서가 인덱스의 논리적 순서에 따라 결정됩니다.

CREATE UNIQUE CLUSTERED INDEX danhba_chimucduynhat
ON danhba (ho, ten);

이렇게 생성된 인덱스는 성과 이름 두 필드로 구성되며, 동시에 테이블 내 행들의 정렬 순서도 이 인덱스 기준으로 재배열됩니다.

SQL Server에서 인덱스 이름 변경

구문

sp_rename 'tenbang.ten_chi_muc_cu', 'ten_chimuc_moi', 'INDEX';
  • ten_bang: 인덱스가 생성된 테이블의 이름입니다.
  • ten_chi_muc_cu: 이름을 변경하려는 기존 인덱스의 이름입니다.
  • ten_chimuc_moi: 인덱스에 부여할 새 이름입니다.

예제

sp_rename 'danhba.danhba_chimuc', 'danhba_chimuc_ten', 'INDEX';

이 예제는 danhba 테이블의 인덱스 이름을 danhba_chimuc에서 danhba_chimuc_ten으로 변경합니다.

SQL Server에서 인덱스 삭제

구문

DROP INDEX tenbang.ten_chimuc;
  • ten_bang: 인덱스가 생성된 테이블의 이름입니다.
  • ten_chimuc: 삭제하려는 인덱스의 이름입니다.

예제

DROP INDEX danhba.danhba_chimuc;

이 예제는 danhba 테이블에서 danhba_chimuc라는 이름의 인덱스를 삭제합니다.

지금까지 SQL Server에서 인덱스를 생성하고 관리하는 전 과정을 살펴보았습니다. 인덱스를 적절히 활용하면 쿼리 성능을 크게 향상시킬 수 있으므로, 데이터 조회가 빈번한 열에 인덱스를 전략적으로 적용해 보시기 바랍니다.