[DB] DB의 INDEX 개념정리
[DB] Index 개념 정리
개념
- 일종의 책 뒤의 찾아보기나 책 앞의 목차의 개념으로 이해하면 됩니다.
- 주로 쿼리의 성능을 높이기 위해 사용됩니다.
장단점
장점
- 검색 속도 향상
- 시스템의 부하를 줄여, 시스템 전체 성능향상에 기여가 가능합니다.
단점
- 인덱스를 위한 추가 공간이 필요합니다.
- 생성에 시간이 소요 될 수 있습니다.
- 생성, 수정, 삭제에 대한 성능이 하락할 수 있습니다.
인덱스가 필요한 경우
주의사항
- 무분별한 인덱스는 용량을 차지하고, 옵티마이저의 최적화를 낮추는 결과를 얻게 됩니다.
- 특정 컬림들을 조건으로 걸 때, 정렬된 인덱스의 순서와 맞지않는다면 추가적인 비용이 발생합니다.
인덱스가 필요없는 경우
- 데이터가 적은 경우(수천건 미만) 인 경우에는 인덱스가 없는 것이 성능이 좋습니다.
- 조회보다 삽입, 수정, 삭제 처리가 많은 테이블인 경우
- 조회결과가 전체행의 15% 이상 읽어들일 것으로 예상되는 경우
인덱스가 필요한 경우
- 데이터가 많이 쌓일거라고 예상되거나 많은 경우, 조회속도가 너무 느린 경우
- 조회결과가 전체 데이터 수의 3~5% 이상쯤되면 인덱스 스캔이 효율적이고 적은 비용으로 찾을 수 있습니다.
- Access 대상 범위가 전체 범위의 3~5% 이상 쯤 되면 인덱스 스캔보다 풀 스캔이 훨씬 유리합니다.
종류
Clusted Index(클러스터형 인덱스)
- 테이블당 한 개만 생성이 가능합니다.
- 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬합니다.
- primary 키 설정 시 자동으로 생성되며 컬럼은 데이터 변경시, 항상 정렬을 유지합니다.
주의 사항
- 클러스터 인젝스 사용시 모든 보조 인덱스카 primary 키를 포함합니다.
- primary 키의 크기가 커질수록 보조 인덱스의 크기도 커집니다.
Non-Clustered Index(비클러스터형 인덱스)
- 테이블당 여러 개를 생성할 수 있습니다.
- 맨뒤의 찾아보기가 있는 일반 책과 같습니다.
- 테이블의 페이지를 정렬하지 않고 새로운 공간을 할당하므로, 클러스터 인덱스보다 많은 공간을 차지합니다.
- 데이터 행과 분리된 구조를 가집니다.
단일 인덱스
- 데이터가 많지 않으며 조건에 걸리는 컬럼이 적은 경우에 주로 사용합니다.
CREATE INDEX IDX_SINGLE (C1);
복합 인덱스
- 테이블 데이터를 기준으로 새로운 인덱스 공간을 생성 및 데이터를 정렬하므로 공간 사용량이 증가합니다.
CREATE INDEX IDX_MULTI (C1, C2);
커버드 인덱스
- 커버드 쿼리라고도 합니다.
- 퀴리가 인덱스 접근으로 인해 테이블 접근이 필요하지 않는 경우 사용됩니다.
CREATE INDEX IDX_MULTI (C1, C2);
SELECT C1, C2 FROM IDX_MULTI WHERE C1 = 'value1' and C2 = 'value2';
Column store Index (열 저장 인덱스)
- 열 저장소 인덱스는 방대한 데이터 웨어하우징 진리표를 삭제하고 질문하는 것과 관련하여 표준 유형의 인덱스가 있는 SQL 서버의 인덱스 유형 중 하나입니다.
- column-store 인덱스는 작은 인상 안에 정보를 넣을 수 있도록 하여 속도를 높이는데 도움이 됩니다.
- 이를 사용하면 클라이언트가 기존의 열 정렬 용량과 달리 조회 실행이 몇 배 높은 IO를 얻을 수 있습니다.
Filtered Index (필터링된 인덱스)
- 필터링된 인덱스는 열에 값의 하위 집합에 대한 질문에 적용 가능한 숫자가 몇 개 없을 때 만들어지는 SQL Server의 인덱스 유형 중 하나입니다.
- 테이블이 이기종 데이터 행으로 구성되어 있는 경우, 적어도 한 종류의 데이터에 대해 SQL에 분리된 목록이 만들어집니다.
Hash Index (해시 인덱스)
- 해시 인덱스는 포인터 또는 N 버킷의 배열과 각 슬롯 또는 버킷의 행을 포함하는 슬록에 있는 SQL 서버의 인덱스 유형 중 하나입니다.
- N은 여러 버킷이고 K는 임계값인 해시 함수 F(K, N)을 사용합니다.
- 용량은 해시 인덱스의 버킷과 관련된 키를 나타내며 해시 인덱스의 모든 버킷은 8ㅂ이트로 구성되며 기본 섹션의 연결된 런다운 메모리 주소를 저장하는데 사용합니다.
Unique Index (고유 인덱스)
- SQL 서버의 고유 인덱스는 인덱스 키에 복사 의존이 포함되어 있지 않는지 확인하고 보장하며 이러한 행을 따라 클라이언트가 테이블의 각 행이 어느쪽이든 예외적인지 검사할 수 있도록 합니다.
인덱스 생성 방법
자동 생성과 수동 생성
- 유일 인덱스는 테이블 정의시 primary key와 unique key 제약 조건을 정의할 때 자동으로 생성됩니다.
- 사용자는 행에 대한 액세스 시간을 향상 시키기 위해 열에서 유일하지 않은 인덱스를 생성할 수 있습니다.
상세 생성 방법
- 개발 디비에 따라 조금씩 다를 수 있으니 공식 document를 참고하는 것이 좋을 것 같습니다.
출처