pk 인덱스 vs 그냥 인덱스
- 참고: https://goodgid.github.io/Index-vs-Primary-Key/
- PK
- RDBMS에서는 PK가 자동으로 Index
- 개념적인 값으로, 여러 Tuple 중 유일한 Tuple임을 보장
- PK를 쓰면 단박에 찾을 수 있음
- 약간 Array의 인덱스 갬성 O(1)
- Index
- Tuple의 유일성 보장은 X
- 단지 테이블에서 Tuple을 빨리 찾을 수 있도록 하기 위해 쓰임
- Index 칼럼 기준으로 B-tree 등을 통해 별도 디스크 공간 차지
복합 인덱스의 효과?
- 실제 예시
- SELECT * FROM emp WHERE deptno = 30 AND sal >= 2000 의 경우
-
- deptno에 대해서만 인덱스 걸었다면, sal을 검사하기 위해 6번의 테이블 IO
- deptno, sal에 대해서 복합 인덱스 걸었다면, 조건을 만족하는 하나의 칼럼에 대해 1번 테이블 IO
- 주의할 점
- A+B+C에 대해 인덱스 걸었으면,
- A 혹은 A+B 에 대해 인덱스 생성하는 것은 무용지물!
- 범위 검색하는 칼럼을 뒤에다 둘것!!!
- 앞대가리 인덱스에서 칼럼을 특정 지을 수 있는 것으로 짓도록 노력하자
- 복합 인덱스의 설정 기준?
- 복합 인덱스는 결국 디스크 IO를 적게 발생시키기 위함
- 다음과 같은 우선순위로 인덱스 생성시, 데이터 추출에 디스크 IO 적게 발생시킬 수 있음
1. 칼럼이 사용한 연산자에 의한 인덱스
2. 랜덤 액세스를 고려한 인덱스
3. 정렬 제거를 위한 인덱스
4. 단일 컬럼의 분포도를 고려한 인덱스