티스토리 뷰
인덱스
- 테이블 안의 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터베이스 객체
- 책에서 원하는 내용이 설명된 페이지를 목차나 색인을 통해 쉽게 찾는 것과 같은 원리
필요성
- 실제 데이터베이스 안의 테이블 데이터가 저장되는 곳은 디스크와 같은 보조기억장치
- SQL 실행 시 디스크로부터 필요한 데이터를 찾음
- 디스크 안의 데이터베이스 파일로부터 필요한 블록을 반복해서 주기억장치로 읽어오게 되는데, 문제는 디스크 접근 속도가 주기억장치 접근 속도보다 훨씬 느리다는 점
- 디스크 접근 횟수를 줄여 검색 속도를 높이기 위해 인덱스 사용
인덱스의 구조
- 대부분의 DBMS는 B-트리 구조의 인덱스 지원
- 루트노드, 중간 노드, 리프노드로 구성
- 리프노드들이 같은 레벨에 존재하는 균형 트리
- 리프 노드의 인덱스 페이지에는 데이터의 위치 정보가 저장
- 순차 검색은 모든 행을 순차적으로 램으로 불러와 데이터 검색, 반면 B-트리 인덱스 기반의 직접 검색은 필요한 일부 행만 램으로 불러와 직접 비교함으로써 디스크 입출력 횟수를 크게 감소
인덱스 생성, 삭제
인덱스 적용 고려사항
- 인덱스를 많이 생성한다고 검색 성능이 반드시 향상되는 것 아님
- 불필요한 인덱스는 오히려 성능을 떨어뜨리고 저장 공간만 낭비
인덱스 생성이 필요한 경우
- 기본키와 외래키의 경우. 대부분의 DBMS는 기본키에 대해 자동으로 인덱스 생성
- WHERE절 조건식에 자주 사용되는 테이블의 열의 경우.
- 조인 조건식에 자주 사용되는 테이블의 열
- ORDER BY, GROUP BY에 자주 사용되는 열
- 가변길이 문자형이나, 실수형, 날짜형 열보다는 정수형, 고정길이 문자형 열
* 하나의 테이블에는 3-5개 정도의 인덱스가 효과적
인덱스 생성이 불필요한 경우
- 갱신이 빈번한 테이블 열
- 집계 함수, 내장 함수를 적용하여 열 값을 변형하는 경우
- "성별"같은 열처럼 도메인이 작아 열의 selectivity가 높은 경우
- 범위 검색을 하는 경우
- 테이블 행의 개수가 적은 경우
'데이터베이스' 카테고리의 다른 글
[데이터베이스] #11. 데이터베이스 설계 (0) | 2021.12.26 |
---|---|
[데이터베이스] #10. E-R 모델 (0) | 2021.12.26 |
[데이터베이스] #9. 정규화 (0) | 2021.12.26 |
[데이터베이스] #8. 트랜잭션 (0) | 2021.12.26 |
[데이터베이스] #7. 내장함수, 저장 프로시저, 트리거 (0) | 2021.12.26 |