hmk run dev
DATABASE 인덱스란? (INDEX) 본문
인덱스란?
검색을 위해 임의의 규칙대로 부여된, 임의의 대상을 가리키는 무언가( 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
'mysql' 카테고리의 다른 글
WHERE 절에 컬럼(nullable) 조건주기 (0) | 2022.02.15 |
---|---|
커넥션 풀 (connection pool) & keep alive (0) | 2022.02.05 |
mysql 데이터 백업 (DBeaver) (0) | 2022.01.03 |
쿼리 실행계획 Query Plan (0) | 2021.12.27 |
계층형 쿼리에서 부모 정보 조회 쿼리 (PL/SQL 대신) (0) | 2021.12.22 |