SQL - 인덱스란?
SQL - 인덱스란?
인덱스란?
- 특정 컬럼들의 데이터를 기반으로 생성되는 원본 테이블과는 별개의 특수한 자료 구조임.
- 지정된 컬럼의 값과 해당 값을 가진 실제 데이터 행의 위치(
PK, 포인터 등)를 한 쌍으로 저장함. - 인덱스 내부의 데이터는 항상 정렬된 상태를 유지함.
- B-Tree 알고리즘을 사용함.
- 인덱스가 붙어 있으면 풀 테이블 스캔이 일어나지 않고 인덱스를 타서 조회하여 빠르게 조회 처리가 가능함.
풀 테이블 스캔(Full Table Scan)이란 테이블 전체 행(row)을 스캔하는 것을 의미함.
인덱스 유형
- 클러스터 인덱스(Clustered Index): 기본키(
PK)를 기반으로 만드는 인덱스임.- 기본키(
PK) 자체가 인덱스 역할을 수행하는 것임.
- 기본키(
- 보조 인덱스(Secondary Index): 원본 데이터의 기본키(
PK) 값을 함께 보관함.- 기본키(
PK) 값으로 클러스터 인덱스를 통해 원하는 데이터를 조회함.
- 기본키(
인덱스 생성
- MySQL은
PK,FK,Unique Key에 대한 인덱스를 자동으로 만들어줌.
Unique Key에 인덱스를 생성하는 이유
- 새로운 데이터를 삽입하거나 기존 데이터를 수정할 때마다 입력하려는 값이 테이블에 이미 존재하는지 빠르게 확인해야하기 때문임.
- 만약 인덱스가 없을 경우 중복 검사를 위해 매번 풀 테이블 스캔이 발생하기 때문에 쓰기 성능이 떨어질 수 있음.
구문
1
CREATE INDEX index_name ON table_name (column_name1, ...);
예시
1
CREATE INDEX idx_articles_title ON articles (title);
인덱스 조회
구문
1
SHOW INDEX FROM table_name;
예시
1
SHOW INDEX FROM articles;
Key_name: 인덱스 이름Column_name: 해당 인덱스가 어떤 컬럼을 기반으로 만들어졌는지를 표시함.Non_unique:1: 중복 값을 허용하는 인덱스0: 중복 값을 허용하지 않는 고유 인덱스UNIQUE또는PRIMARYKEY라는 의미임.
Cardinality: 인덱스에 저장된 고유한 값의 개수에 대한 추정치- 값이 높을수록 중복도가 낮다는 의미
- 인덱스의 성능이 좋다고 판단 가능함.
- 중복도가 높을수록 인덱스를 사용하는 의미가 없어짐.
- 값이 높을수록 중복도가 낮다는 의미
결과를 확인해보면
PRIMARY KEY에 인덱스가 만들어져 있는 것을 확인할 수 있음.
인덱스 제거
구문
1
DROP INDEX index_name ON table_name;
예시
1
DROP INDEX idx_articles_title ON articles;
This post is licensed under CC BY 4.0 by the author.
