📌 [SQL] SQL 실행 계획(EXPLAIN PLAN) 분석 및 최적화
📌 SQL 실행 계획(EXPLAIN PLAN)이란?
SQL 실행 계획(Execution Plan)은 쿼리가 데이터베이스에서 실행되는 방식을 보여주는 정보입니다.
올바르게 분석하면 쿼리 성능을 최적화하고 실행 속도를 개선할 수 있습니다.
📌 EXPLAIN PLAN 사용법
1️⃣ EXPLAIN PLAN 실행 방법
아래 명령어를 실행하면 실행 계획을 확인할 수 있습니다.
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE salary > 5000;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
위 명령어는 실행 계획을 저장한 후, DBMS_XPLAN.DISPLAY
를 사용하여 조회합니다.
2️⃣ 실행 계획 결과 예제
아래와 같은 실행 계획이 출력될 수 있습니다.
--------------------------------------------------
| Id | Operation | Name | Rows |
--------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 |
| 1 | TABLE ACCESS FULL| EMPLOYEES | 1000 |
--------------------------------------------------
위 결과에서 TABLE ACCESS FULL이 나타나면 해당 테이블 전체를 검색하기 때문에 성능이 저하될 수 있습니다.
📌 실행 계획 분석 및 최적화 방법
1️⃣ 인덱스 활용 여부 확인
실행 계획에서 TABLE ACCESS FULL
이 표시되면 인덱스가 사용되지 않은 것을 의미합니다.
해결 방법: 적절한 인덱스를 추가하여 쿼리 성능을 향상시킵니다.
CREATE INDEX idx_salary ON employees(salary);
이제 실행 계획을 다시 확인하면 INDEX RANGE SCAN
이 표시될 가능성이 높습니다.
2️⃣ JOIN 최적화
실행 계획에서 NESTED LOOPS
또는 HASH JOIN
이 표시될 수 있습니다.
예제 쿼리:
EXPLAIN PLAN FOR
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
만약 실행 계획에서 HASH JOIN이 표시되면 대량의 데이터가 조인되므로 성능 저하가 발생할 수 있습니다.
해결 방법: 조인 대상 컬럼에 인덱스를 추가하여 NESTED LOOPS
로 변경 가능
CREATE INDEX idx_department ON employees(department_id);
3️⃣ WHERE 절 조건 최적화
실행 계획에서 FILTER
가 많이 사용되면 불필요한 조건 검사가 많을 수 있습니다.
해결 방법: WHERE 절에서 함수를 사용한 조건을 제거하고 인덱스를 활용하도록 수정
-- 비효율적인 조건 (인덱스 미사용)
SELECT * FROM employees WHERE TO_CHAR(hire_date, 'YYYY-MM-DD') = '2024-01-01';
-- 최적화된 조건 (인덱스 활용)
SELECT * FROM employees WHERE hire_date = TO_DATE('2024-01-01', 'YYYY-MM-DD');
📌 실행 계획 최적화 요약
- ✅ TABLE ACCESS FULL을 피하고 인덱스를 활용
- ✅ JOIN 최적화: HASH JOIN이 아닌 NESTED LOOPS를 활용
- ✅ WHERE 절에서 함수 사용을 최소화하여 인덱스 활용
🔍 결론
SQL 실행 계획(EXPLAIN PLAN)은 쿼리 성능을 분석하는 핵심 도구입니다.
위 방법을 적용하면 불필요한 전체 테이블 검색을 줄이고 실행 속도를 최적화할 수 있습니다! 🚀
📌 더 많은 SQL 튜닝 팁이 궁금하다면?
'SQL & 데이터베이스 > SQL 성능 최적화 & 튜닝' 카테고리의 다른 글
[SQL 성능 최적화 & 튜닝] SQL VIEW와 MATERIALIZED VIEW 차이 및 활용법 (0) | 2025.03.17 |
---|---|
[SQL 성능 최적화 & 튜닝] 오라클 INDEX 종류와 활용법 (B-Tree, Bitmap) (0) | 2025.03.15 |
[SQL] 윈도우 함수(Window Function) 개념과 활용 예제 (0) | 2025.03.13 |
[SQL] INDEX(인덱스) 개념과 성능 최적화 방법 (1) | 2025.03.12 |
[SQL] 인덱스(INDEX) 활용하여 SQL 성능 최적화하기 (0) | 2025.03.11 |