-
2주차 Database Study
인덱스
- 테이블 내에서 검색속도를 향상시키는 자료구조
- 특정 컬럼에 대한 검색, 정렬 속도를 빠르게 수행
- 특정 값이나 범위 검색시 유용 WHERE, BETWEEN, ORDER BY, JOIN할때도 유용
B-Tree 인덱스, Hash 인덱스
- B-Tree를 통해 데이터를 정렬하여 저장 → 정렬과 범위 검색에 유용 : O(logN)
- 데이터를 해시값으로 저장 → 정확히 일치하는 값을 찾는데 최적 : O(1)
인덱스를 사용할 때 장/단점
검색속도 향상
앞서 말한대로 특정 값이나 범위 검색시 유용하다는 장점
저장공간 필요
INT 4byte, VARCHAR는 데이터의 크기만큼 차지한다고함
인덱스 갱신
쓰기 작업(INSERT/UPDATE/DELETE) 수행시, 인덱스를 재구성하는 인덱스 갱신이 일어남
때문에 쓰기 작업 + 인덱스 갱신을 통해서 쓰기 성능이 낮아질 수 있음
인덱스 스캔 방법
- Full Scan : 테이블 전체 조회
- Index Full Scan : 인덱스 테이블 전체 조회
- Index Range Scan : 인덱스 테이블 범위 조회 ex) BETWEEN
- Index Unique Scan : 인덱스 테이블 특정 값으로 조회 ex) WHERE
- Index Loose Scan : 부분적인 값을 기준으로 조회 ex) LIKE
- Index Merge Scan : 두 개 이상의 인덱스를 합성 ex) WHERE A AND B
복합 인덱스(Composite Index)
- 두개이상의 컬럼을 결합하여 만든 인덱스
- 여러 개의 컬럼으로 조회해야하는 경우가 많을 때 유용
SELECT * FROM STUDENT WHERE STU_ID = 1 AND GRADE_CD = 10001
위와 같이 여러 개의 컬럼 쌍으로 조회하는 케이스가 많다면 복합 인덱스를 고려할 수 있음
인덱스 설계 시 고려해야 할 핵심 요소
인덱스 키로 쿼리하는 빈도가 많은 것 ex) 학생의 학년 컬럼으로 자주 쿼리하는 경우
카디널리티가 높은 컬럼 → 카디널리티가 높다는 건 고르게 분포되어있다는 뜻