
📚 오라클 인덱스 완전 정복!오라클2025. 9. 24. 13:42
Table of Contents
1. 인덱스란? 🤔
데이터베이스에서 **인덱스(Index)**는 📖 책 뒤쪽에 있는 색인과 비슷해요.
👉 “KING이라는 사원이 어디 있지?” 하고 매번 책 전체(테이블 전체)를 뒤지는 대신, 인덱스를 보면 바로 해당 페이지(ROWID)를 찾아갈 수 있습니다.
즉, 검색 속도를 빠르게 해주는 비밀 무기 💡
2. 인덱스 구조 🏗️
오라클에서 가장 흔히 쓰이는 건 B-Tree 인덱스 🌳
- Root 블록 → 시작점
- Branch 블록 → 가지
- Leaf 블록 → 끝에 ROWID 저장 (실제 데이터 위치!)
데이터를 찾을 때는
📌 "인덱스에서 위치 확인 → 테이블에서 값 가져오기"
이 순서로 움직입니다.
3. 인덱스 종류 🎯
인덱스도 종류별 특징이 달라요.
- B-Tree 인덱스 🌳
- 가장 기본!
- = 검색, 범위 검색에 강함.
- Bitmap 인덱스 🟦🟥
- 값 종류가 적은 컬럼 (예: 성별, Y/N)
- 대량 데이터 분석용으로 Good!
- Unique 인덱스 ✅
- 중복 불가 보장.
- PRIMARY KEY, UNIQUE 제약과 같이 사용됨.
- Function-Based 인덱스 🧮
- UPPER(name) 같은 함수 결과에 인덱스!
- 가공된 컬럼 검색 시 유용.
- Composite 인덱스 (복합 인덱스) 🔗
- 두 개 이상 컬럼 묶음.
- 순서 중요! (선두 컬럼 꼭 활용해야 인덱스가 잘 작동함).
4. 인덱스 만들기 & 관리 🛠️
-- 단일 컬럼 인덱스 CREATE INDEX idx_emp_name ON employees (ename); -- 복합 인덱스 CREATE INDEX idx_emp_dept_job ON employees (deptno, job); -- 함수 기반 인덱스 CREATE INDEX idx_emp_upper_name ON employees (UPPER(ename));
확인하기 🔍
SELECT index_name, table_name FROM user_indexes WHERE table_name = 'EMPLOYEES';
삭제하기 🗑️
DROP INDEX idx_emp_name;
5. 주의할 점 ⚠️
- 인덱스가 많다고 무조건 좋은 건 ❌
→ INSERT/UPDATE/DELETE 할 때 인덱스도 갱신해야 해서 느려질 수 있음. - 인덱스 컬럼을 가공하면 인덱스 못 씀 😭→ 해결: Function-Based Index 사용
-
SELECT * FROM employees WHERE SUBSTR(ename,1,3) = 'KIM';
- 복합 인덱스는 선두 컬럼이 핵심!
-
CREATE INDEX idx_emp_dept_job ON employees (deptno, job); -- 인덱스 사용 O SELECT * FROM employees WHERE deptno = 10; -- 인덱스 사용 X SELECT * FROM employees WHERE job = 'CLERK';
6. 인덱스 쓰였는지 확인하기 🔎
EXPLAIN PLAN FOR SELECT * FROM employees WHERE ename = 'KING'; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
- INDEX RANGE SCAN → 인덱스 사용됨 👍
- FULL TABLE SCAN → 인덱스 안 씀 👎
7. 간단 실습 💻
-- 테이블 생성 CREATE TABLE employees ( empno NUMBER PRIMARY KEY, ename VARCHAR2(50), deptno NUMBER, job VARCHAR2(30) ); -- 데이터 입력 INSERT INTO employees VALUES (1, 'KING', 10, 'CLERK'); INSERT INTO employees VALUES (2, 'SCOTT', 20, 'ANALYST'); INSERT INTO employees VALUES (3, 'FORD', 10, 'MANAGER'); COMMIT; -- 인덱스 생성 CREATE INDEX idx_emp_ename ON employees (ename); -- 검색 (인덱스 타는지 확인!) SELECT * FROM employees WHERE ename = 'KING';
8. 정리 ✨
- 인덱스 = 📖 색인, 검색 속도를 확 올려줌
- 하지만 무분별한 인덱스 = ⚡ 성능 저하 위험
- 읽기 많은 테이블 → 인덱스 적극 활용
- 쓰기 많은 테이블 → 신중하게
👉 오라클 튜닝의 첫걸음은 “인덱스를 어디에, 어떻게 걸 것인가?”에서 시작됩니다 🚀
'오라클' 카테고리의 다른 글
| 5강: 테이블 관리와 데이터 조작 (0) | 2024.12.16 |
|---|---|
| 4강 : JOIN과 서브쿼리 활용 (1) | 2024.12.11 |
| 3강 : SQL 기본 함수와 데이터 연산 (0) | 2024.12.11 |
| 2강 : SQL 기본 문법과 SELECT 활용 (0) | 2024.12.11 |
| 1강: 오라클 데이터베이스와 SQL 소개 (0) | 2024.12.11 |

@Soohocoding :: Soohocoding
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!