본문 바로가기

Language/Oracle

[Oracle] Index

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

https://zorba91.tistory.com/293

https://velog.io/@jjh0526/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%9D%B8%EB%8D%B1%EC%8A%A4index%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EA%B5%AC%ED%98%84-%EB%B0%A9%EC%8B%9DHash-Table-BTree

'Language > Oracle' 카테고리의 다른 글

[Oracle] SQL 쿼리 수행 순서  (0) 2025.01.28
[Orcale] 페이징 ROWNUM, OFFSET  (0) 2024.02.27