hmk run dev

DATABASE 인덱스란? (INDEX) 본문

mysql

DATABASE 인덱스란? (INDEX)

hmk run dev 2022. 1. 31. 23:41

인덱스란?

검색을 위해 임의의 규칙대로 부여된, 임의의 대상을 가리키는 무언가( ex 주소, 주민등록번호 등등...)

 

데이터베이스의 인덱스

인덱스에는 크게 두 가지 인덱스가 있다.

 

Cluster(군집)

데이터와 인덱스가 군집, 밀접하게 관련있음

 

예시 데이터 구조

1 => 김형민, 28

2 => 홍길동, 24

3 => 임꺽정, 26

 

이런 데이터 구조사이(1과 2의 사이 )에 새로운 데이터가 들어온다고 가정을 해보자

 

2. 이순신, 33

 

>>

1 => 김형민, 28

2 => 이순신, 33

3 => 홍길동, 24

4 => 임꺽정, 26

 

위를 통해서 cluster 인덱스의 장점과 단점을 얉게 훑어 볼 수 있다.

 

특징

순서대로 

한 테이블당 1개

범위 검색 성능 좋음

존재하는 PK사이에 INSERT시 성능 저하( 데이터 많을 경우 )

AUTO INCREMENT

 

장점 

인덱스와 데이터가 군집화 되어있어 범위 검색 등에 빠른 성능을 보여줄 수 있음

 

단점

인덱스와 데이터가 군집화 되어있어 중간에 데이터 삽입시 뒤의 데이터를 모두 뒤로 밀어줘야함

 

 

Non Cluster

인덱스와 데이터가 군집되어있지 않고 어떤 인덱스를 참조하는 구조

 

1 => 134

2 => 223

3 => 234

1등은 134번째 데이터, 2등은 223, 3등은 234

 

순서와 상관없고 데이터를 가지고 직접 있진않다. 해쉬 테이블 방식으로 되어있음 인덱스 : 참조 인덱스

 

특징

순서상관X 

한 테이블에 여러개

추가 저장 공간 필요(약 10%)

INSERT시 추가 작업 필요(인덱스 생성) - 어떤 행이 들어올 때 인덱스 생성필요

Cardinality 카디널리티 - 중복되는 것들이 많은 수록 낮다. 유일 할 수록 높다.

카디널 리티가 높을 수록 인덱스 사용을 고려할 필요가 있다.

 

INDEX 생성

index는 열 당위로 생성되는데, 하나의 열에 생성할 수 있고, 여러 열에 하나의 index를 생성할 수도 있다.

 

테이블을 생성할때 하나의 열에 primary key를 지정하면 자동으로 clustered index가 생성된다.

PK가 없는 경우

 

UNIQUE 제약 조건이 있는 테이블을 만들면 DB에선 자동으로 non-clustered index를 만든다.

 

pk를 지정하는 열에는 강제적으로 Non-Clustered index를 지정 가능하다.

 

기존 테이블에 PK 제약 조건을 적용하려 하거나 해당 테이블에 Clustered index가 이미 있다면

Non-Clustered index를 사용하여 기본키를 적용한다.

 

>>

제약 조건 없이 테이블 생성시에 Index를 만들 수 없으며, 

Index가 자동 생성되기 위한 열의 제약 조건은 Primary Key또는 Unique 이다.

 

Primary key => Clustered index

UNIQUE 조건 => Non Clustered index

 

 

 

 

Comments