1.Index란
- 테이블 전체를 탐색하지 않고, 테이블 내 원하는 데이터에 빠르게 접근할 수 있도록 만들어진 객체
- <키,포인터>쌍으로 구성되는 데이터구조
- B트리, B+트리, 해시테이블등의 구조로 구성
2. 장/단점
1) 장점
- 검색 속도를 향상시켜 전체적인 시스템 부하 감소
- 대용량 데이터 처리에 유리
2) 단점
- Index 테이블을 별도로 생성해 관리하므로 인덱스 관리를 위한 공간 소모
- DML수행시 정렬상태를 유지하기 위한 연산을 추가로 진행해야 하므로 오히려 성능이 저하됨
> INSERT : 새로운 데이터에 대한 인덱스 추가
> DELETE : 삭제하는 데이터를 사용하지않는 상태로 변경
> UPDATE : 기존 인덱스는 사용하지않음 상태로 변경하고, 갱신된 데이터에 대해 인덱스 추가
*이러한 장단점을 고려해 Index를 사용하는 것이 좋은 경우는 다음과 같다.
- 규모가 큰 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN, WHERE, ORDER BY에서 자주 사용되는 컬럼
- 데이터의 중복도가 적은 컬럼
3. Index 자료구조
1) B-Tree 구조
- 가장 널리 사용되는 균형 잡힌 이진 검색 트리 (루트로부터 리프까지의 거리가 일정한 트리 구조)
- 데이터가 항상 정렬된 상태로 유지되어 있음
- 한 노드당 2개 이상의 자식을 가질 수 있고 key, data를 같이 저장함
- O(logN)의 시간 복잡도를 가지며 검색 속도를 높임
2) B+Tree 구조
- B-Tree의 확장된 개념으로 B-Tree보다 더 많은 키를 가질 수 있는 균형 잡힌 이진 검색 트리
- 리프노드에만 key, data를 저장하고 브랜치노드에는 검색을 위한 key만 저장
- 리프노드끼리는 Linked List로 연결되어 순차적으로 저장되어 있으므로 범위검색, 순차검색에 유리
3) Hash Table
- key, value쌍으로 이루어진 자료구조로 key값을 이용해 고유한 index를 생성하고 index에 해당하는 data를 가져오는 방식
- O(1)의 시간복잡도를 가지고 있어 빠른 검색이 가능
- 등호연산에만 특화되어 있어 DB인덱스에서 Hash Table이 사용되는 경우는 제한적
5. INDEX 종류
1) 클러스터드 인덱스 (Clustered Index)
- 테이블당 1개만 존재
- 기본키 설정 시 자동으로 생성됨
- DML수행 시에도 정렬상태를 유지하므로 DML수행속도는 느리지만 검색속도는 상대적으로 빠름
2) 넌클러스터드 인덱스 (Non-Clustered Index)
- 테이블당 여러 개 생성 가능(최대 240개)
- 실제 데이터를 정렬하지 않고 별도의 인덱스 페이지를 생성해 정렬하므로 용량을 더 차지하게 된다
- 검색 속도는 더 느리지만 DML수행속도는 빠름
*참고
https://ittrue.tistory.com/331
'Language > Oracle' 카테고리의 다른 글
[Oracle] SQL 쿼리 수행 순서 (0) | 2025.01.28 |
---|---|
[Orcale] 페이징 ROWNUM, OFFSET (0) | 2024.02.27 |