Oracle의 IOT(Indexed Organized Table) 테이블은 B-tree 인덱스 구조를 기반으로 데이터를 저장하는 특수한 테이블입니다. 일반 테이블(Heap Organized Table)과는 다르게, 기본 키(Primary Key)를 기반으로 데이터를 정렬하여 저장합니다.
📌 IOT 테이블 특징
- B-tree 인덱스 기반 저장
- 일반 테이블은 데이터를 Heap에 저장하고, 인덱스가 별도로 존재하지만,
IOT 테이블은 기본 키 인덱스 자체에 데이터를 저장하여 성능을 향상시킵니다.
- 일반 테이블은 데이터를 Heap에 저장하고, 인덱스가 별도로 존재하지만,
- 빠른 기본 키 검색 성능
- 기본 키 검색이 빠르며, 추가적인 테이블 조회 없이 데이터를 직접 읽을 수 있습니다.
- 특히 OLTP(Online Transaction Processing) 환경에서 성능을 극대화할 수 있습니다.
- 디스크 I/O 감소
- 데이터와 인덱스가 함께 저장되므로 인덱스 검색 후 테이블을 다시 조회할 필요 없음
- 따라서 디스크 읽기 연산이 줄어들어 성능이 향상됨.
- 공간 절약 가능
- 테이블과 인덱스가 하나로 통합되므로 공간 절약 가능.
- 그러나 행 크기가 클 경우 오히려 성능이 저하될 수 있음.
- 범위 검색이 빠름
- 기본 키를 기준으로 정렬되어 있어 범위 검색(Range Scan) 이 빠름.
📌 IOT 테이블 생성 방법
CREATE TABLE iot_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
age NUMBER
) ORGANIZATION INDEX;
ORGANIZATION INDEX
키워드를 사용하면 IOT 테이블로 생성됨.- 기본 키(
id
)를 기준으로 B-tree 인덱스 구조로 정렬 및 저장.
📌 IOT 테이블 성능 튜닝
- 오버플로우 방지
- IOT 테이블의 각 행이 너무 커지면 일부 데이터가 오버플로우 세그먼트(Overflow Segment)로 이동 → 성능 저하 발생.해결 방법: 행 크기를 줄이거나 오버플로우를 위한 별도 공간 지정
CREATE TABLE iot_table ( id NUMBER PRIMARY KEY, name VARCHAR2(100), age NUMBER ) ORGANIZATION INDEX INCLUDING name -- name까지는 IOT 테이블에 저장 OVERFLOW; -- 나머지 컬럼은 오버플로우 세그먼트에 저장
- 적절한 기본 키 선정
- 기본 키 크기가 크면 B-tree 깊이가 증가하여 성능 저하 가능
- 작은 크기의 기본 키 사용 권장 (예:
VARCHAR2(50)
대신NUMBER
사용)
📌 IOT 테이블 vs 일반 테이블 비교
비교 항목 | 일반 테이블 (Heap) | IOT 테이블 |
---|---|---|
데이터 저장 구조 | Heap (비정렬) | B-tree 인덱스 정렬 |
기본 키 검색 속도 | 상대적으로 느림 | 빠름 |
디스크 I/O | 테이블 + 인덱스 읽기 | 인덱스에서 바로 조회 |
인덱스 유지 비용 | 별도 관리 필요 | 내장됨 |
INSERT 속도 | 빠름 | 상대적으로 느림 |
📌 언제 IOT 테이블을 사용해야 할까?
✅ 기본 키 기반 검색이 많을 때 → 조회 성능 향상
✅ 데이터 정렬이 필요할 때 → 범위 검색이 많으면 유리
✅ 디스크 I/O를 줄여야 할 때 → 인덱스 탐색 후 테이블 조회 과정 생략 가능
❌ 자주 변경되는 데이터(UPDATE, DELETE) → 조각화(Fragmentation) 발생 가능
❌ 행 크기가 클 때 → 오버플로우 문제 발생 가능
📌 결론
- OLTP 환경에서 기본 키 기반 검색이 많고, 데이터 크기가 작을 때 유용함.
- 읽기 성능 최적화가 필요할 때 고려하면 좋음.
- 그러나 INSERT/UPDATE 성능이 중요한 경우 일반 테이블이 더 적합할 수 있음.