SQLP
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
예상 실행계획 확인: EXPLAIN PLAN·PLAN_TABLE·AUTOTRACE
원래 이론 →판단 기준
같은 STATEMENT_ID로 여러 Plan이 있을 때는 filter_preds를 이용해 PLAN_ID를 제한할 수 있습니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
SELECT *
FROM TABLE(
DBMS_XPLAN.DISPLAY(
table_name => 'PLAN_TABLE',
statement_id => 'EMP_DEPT_V1',
format => 'TYPICAL +PREDICATE',
filter_preds => 'plan_id = 42'
)
);
filter_preds는 PLAN_TABLE에 적용되는 SQL Predicate 문자열이므로 Application이 사용자 입력을 그대로 전달하면 SQL Injection 위험이 있습니다. 미리 정한 안전한 조건만 사용합니다.
헷갈리는 개념
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 혼동하기 쉬운 판단 | 정확한 기준 |
|---|---|
| PLAN_TABLE은 항상 사용자가 새로 만들어야 한다 | 현대 Oracle은 SYS.PLAN_TABLE$ GTT와 PLAN_TABLE Synonym을 자동 제공하며 필요 시 Local Table을 만든다 |
utlxplan.sql이 공용 Synonym을 만든다 | Local Sample PLAN_TABLE은 utlxplan, 공용 GTT·Synonym 구성은 catplan 역할이다 |
| EXPLAIN PLAN이 대상 SQL을 실행한다 | 대상 SQL은 실행하지 않고 PLAN_TABLE에 예상 계획 행을 Insert한다 |
| EXPLAIN PLAN은 자동 Commit한다 | DML이므로 Implicit Commit을 발생시키지 않는다 |
| STATEMENT_ID가 같으면 Plan도 하나다 | 같은 ID에 여러 PLAN_ID가 존재할 수 있다 |
| DISPLAY는 세 인자만 가진다 | 네 번째 선택 인자 filter_preds가 있으며 보안에 주의한다 |
| NULL Statement ID면 아무 계획이나 표시한다 | 조건에 맞는 가장 최근 Explain Plan을 기본 표시한다 |
| TRACEONLY는 SQL 실행을 막는다 | 출력만 억제하며 TRACEONLY EXPLAIN 외에는 실제 실행될 수 있다 |
| TRACEONLY STATISTICS는 Fetch하지 않는다 | 통계를 위해 Query Data를 Fetch하되 화면에 출력하지 않는다 |
| AUTOTRACE 계획은 실제 Child Plan이다 | EXPLAIN PLAN 기반 예상 계획이다 |
| AUTOTRACE 통계는 Operation별 통계다 | Statement 전체 Session 통계 차이다 |
| DML TRACEONLY는 데이터를 변경하지 않는다 | 실제 DML·Lock·Undo·Redo가 발생하며 자동 Rollback되지 않는다 |
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.