데이터의 고유성을 확인하거나 검색 성능을 향상시키기 위해 사용하는 객체
특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 공간에 데이터의 물리적 주소와 함께 저장한다. 인덱스를 생성할 때 수행하는 정렬 작업은 이후 해당 데이터를 빠르게 검색하는 데 중요한 역할을 한다. 왜냐하면 무작위로 입력된 데이터에 비해 정렬된 데이터는 선후관계를 파악할 수 있어 불필요한 데이터를 읽지 않고 원하는 데이터에만 접근할 수 있도록 도와주기 때문이다.
책은 보통 맨 뒤에 색인이라는 것을 제공한다. 키워드가 되는 단어들을 중심으로 책의 내용을 찾을 수 있도록 돕는 역할을 하는 것이다. 바로 이 색인의 기능이 인덱스와 그것과 유사하다.
인덱스를 분류하는 기준에 따라 다음과 같이 다양하게 나뉜다.
우리가 흔히 말하는 인덱스는 대부분 밸런스드 트리 인덱스를 의미한다.
인덱스의 가장 중요한 기능은 데이터의 조회 속도를 빠르게 하는 것.
B*Tree 인덱스 ROOT 블록을 시작으로 BRANCH 블록, LEAF 블록의 순서로 데이터를 검색하는데, 얼마나 많은 BRANCH 블록과 LEAF 블록을 경유할지는 조건의 유형 (INDEX SCAN 의 방식을 결정짓는 요소)에 따라 결정됨.
INDEX UNIQUE SCAN
UNIQUE INDEX?
https://araikuma.tistory.com/699
INDEX RANGE SCAN
인덱스를 사용해 인덱스가 생성된 컬럼에 대해 범위 검색을 하는 방법이다.
UNIQUE INDEX를 사용하지 않거나 비교연산자를 사용한 대다수의 경우가 이 방식으로 처리되는데, 비교연산자로는 <,<=,>,>=, BETWEEN, LIKE 등이 사용될 수 있다. 검색된 데이터는 오름차순 또는 내림차순으로 정렬하여 출력할 수 있다.
INDEX SKIP SCAN
결합 인덱스의 선행 컬럼에 대한 조건이 없고 후행 컬럼에 대한 조건만 있는 경우 적용된다.
INDEX FULL SCAN
조건절에서 인덱스 컬럼 중 하나 이상을 사용한 경우 또는 SQL에서 사용한 컬럼들이 모두 하나의 인덱스에 존재할 경우 적용되는 방식이다.
이 가운데 SQL에서 사용한 컬럼들이 모두 하나의 인덱스에 존재할 경우, 인덱스를 구성하는 컬럼 중 최소한 하나의 컬럼은 NOT NULL 제약 조건을 충족해야 한다.
INDEX FAST FULL SCAN
SELECT 절과 조건절에 사용된 모든 컬럼이 인덱스 컬럼으로 구성되어 있어 테이블을 검색하지 않고 인덱스의 블록만을 스캔하여 원하는 데이터를 검색하는 방식이다.
CREATE INDEX index_name
ON table_name(col_name1, col_name2, ...);
드라이빙 테이블 결정 규칙 (아래 링크 참고)
https://devuna.tistory.com/36
데이터베이스 분포도 (아래 링크 참고)
https://jdm.kr/blog/169
참고도서: 실전사례로 살펴보는 SQL 튜닝 비법