쿼리 계획이란?
쿼리 계획(Execution Plan)은 오라클 데이터베이스가 SQL 문장을 실행할 때 "어떤 방법으로 데이터를 읽고 처리할지" 미리 계산해서 보여주는 설명서이다.
즉,
- 테이블을 풀스캔할지?
- 인덱스를 탈지?
- 조인을 어떤 순서로 할지?
등을 알려주는 실행 청사진이다.
이걸 보면 쿼리 성능 문제를 미리 예측하거나 최적화할 수 있다.
SQL Developer에서 Explain Plan 확인하는 기본 방법
- SQL Developer 실행
- 오라클 DB에 로그인
- 쿼리 작성 ex) SELECT * FROM employees WHERE department_id = 10;
- 쿼리 블록을 드래그하거나 선택한 후, 상단 메뉴에서 Explain Plan(F10) 버튼 클릭 또는 오른쪽 클릭 → Explain Plan 선택
Explain Plan 결과 화면 읽는 방법
컬럼 | 설명 |
Operation | 어떤 작업을 했는지(Full Table Scan, Index Scan 등) |
Object Name | 대상 테이블이나 인덱스 이름 |
Rows (Cardinality) | 예측 결과로 읽게 될 데이터 건수 |
Cost | 이 작업에 필요한 예상 리소스 소비량(CPU, IO 등) |
Bytes | 읽어야 할 데이터 크기 |
Cardinality 가 높다 = 많은 데이터가 나온다. / Cardinality가 낮다 = 적은 데이터가 나온다.
자주 나오는 Operation 종류 및 의미
Operation | 의미 |
TABLE ACCESS FULL | 테이블 전체를 읽는다( 성능 위험 신호 But 더 좋을때도 있음!) |
INDEX RANGE SCAN | 인덱스를 범위 검색(좋음) |
INDEX UNIQUE SCAN | 인덱스를 정확히 하나만 검색(매우 좋음) |
NESTED LOOPS | 두 테이블을 반복적으로 조인(작은 데이터에 적합) |
HASH JOIN | 대량 데이터 조인 (메모리 사용 많음) |
SORT AGGREGATE | 집계 연산(SUM, COUNT 등) |
Explain Plan 볼 때 주의할 점!
1. Cost가 낮다고 무조건 좋은 게 아니다.
Cost는 참고용이고 "IO 비용"을 줄이는게 최종 목표이다.
2. 풀스캔(TABLE ACCESS FULL)이 무조건 나쁜 건 아니다.
아주 작은 테이블이라면 풀스캔이 더 빠를 수도 있다. 하지만 큰 테이블이라면 반드시 인덱스 활용을 고려해봐야한다.
3. 실행계획이 변할 수 있다.
바인드 변수, 통계 정보, 힌트 등에 따라 변동이 가능하다. ALWAYS 실제 데이터와 상황을 고려해야 한다.
4. AUTOTRACE나 DBMS_XPLAN.DISPLAY를 써보자
Explain Plan은 예측, Autotrace는 진짜 실행 기반이므로 함께 보는 게 좋다.
'Back-End > DB' 카테고리의 다른 글
오라클 날짜별 조회 (0) | 2025.04.07 |
---|---|
오라클 ORA-00054 : 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. (0) | 2025.04.03 |
오라클에서 정말 많이 사용하는 GROUP BY 졸업하기 (0) | 2025.03.12 |
오라클 MERGE INTO 구문과 INACTIVE (1) | 2024.10.18 |
DB Connection is not associated (0) | 2024.09.10 |