SQL> @?/rdbms/admin/utlxplan.sql
SELECT owner, synonym_name, table_owner, table_name
FROM all_synonyms
WHERE synonym_name = 'PLAN_TABLE';
-- set statement_id ='query1' 는 생략 가능하다.
Explain plan set statement_id ='query1' for
select * from emp where empno = 7900;
SQL> SET LINESIZE 200
select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));
select * from table(dbms_xplan.display());
SQL> SET LINESIZE 200
SQL> @?/rdbms/admin/utlxpls;
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
Plan hash value: 4024650034
------------------------------------------------------------------------------
|ID | Operation | Name | Rows | Bytes | Cost (%CPU) |
------------------------------------------------------------------------------
| 0| SELECT STATEMENT | | | 32| 1 (0)|
| 1| TABLE ACCESS BY INDEX ROWID |EMP | 1| 32| 1 (0)|
|* 2| INDEX UNIQUE SCAN |EMP_PK| 1| | 0 (0)|
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
------------------------------------------------------------------------------
2 - access("EMPNO"=7900)
✅ Predicate Information의 세 가지 유형
1. 인덱스 Access Predicate
- 인덱스를 통해 스캔의 범위를 결정하는데 영향을 미치는 조건절이다.
2. 인덱스 Filter Predicate
- 인덱스를 통했으나 스캔의 범위를 결정하는 영향을 미치지 못하는 조건절이다.
3. 테이블 Access Predicate
- NL 조인을 제외한 조인에서 발생하며 결과 값의 범위를 결정하는데 영향을 미치는 조건절이다.
4. 테이블 Filter Predicate
- 테이블 스캔 후 최종 결과 집합 포함 여부를 결정하는데 영향을 미치는 조건절이다.
SQLP 기출 문제를 풀다보면 Explain Plan과 AutoTrace와 SQL 트레이스에서
각각 볼 수 있는 항목과 볼 수 없는 항목을 물어보는데 이게 굉~~~장히 헷갈린다.😂