SQL> Create table t as select * from all_objects;
테이블이 생성되었습니다.
SQL> create index t_owner_idx on t(owner);
인덱스가 생성되었습니다.
SQL> begin
dbms_stats.gather_table_stats(user, 't', method_opt=>'for all columns size 1');
end;
/
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> alter session set "_optimizer_cost_model"=io;
세션이 변경되었습니다.
SQL> set autotrace traceonly exp;
SQL> select /*+ index(t) */ * from t where owner='SYS';
Execution Plan
----------------------------------------------------------
Plan hash value: 910642575
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2368 | 215K| 69 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 2368 | 215K| 69 |
|* 2 | INDEX RANGE SCAN | T_OWNER_IDX | 2368 | | 6 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OWNER"='SYS')
Note
-----
- cpu costing is off (consider enabling it)
비용 = blevel + --수직 탐색 비용
(리프 블록의 수 X 유효 인덱스 선택도) + --수평탐색 비용
(클러스터링 팩터 X 유효 테이블 선택도) + --테이블 Random Access 발생 비용
:데이터의 군집성
SELECT i.blevel AS BL
,i.leaf_blocks AS LF_BLKS
,c.num_distinct AS NUM_DISNT --선택도
,i.clustering_factor AS CLUS_FACTR
,1 + (i.leaf_blocks * 1/c.num_distinct) AS "IDX_SCAN_COST"
,1 + (i.leaf_blocks * 1/c.num_distinct)
+ (i.clustering_factor * 1/c.num_distinct) AS "TOT_TAB_ACC_COST"
FROM USER_INDEXES i, USER_TAB_COL_STATISTICS c
WHERE i.index_name = 'T_OWNER_IDX'
AND i.table_name = c.table_name
AND c.column_name= 'OWNER';
BL LF_BLKS NUM_DISNT CLUS_FACTR IDX_SCAN_COST TOT_TAB_ACC_COST
---------- ---------- ---------- ---------- ------------- ----------------
1 115 21 1322 6.47619048 69.4285714
--EX> T 테이블의 총블럭이 703
SQL> SELECT BLOCKS FROM USER_TABLES WHERE TABLE_NAME = 'T';
BLOCKS
----------
703
--블럭 계수 조절
SQL> ALTER SESSION SET db_file_multiblock_read_count = 10;
세션이 변경되었습니다.
SQL> select /*+ full(t) */ * from t where owner = 'SYS';
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
----------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 2368 | 215K| 94 |
|* 1 | TABLE ACCESS FULL| T | 2368 | 215K| 94 |
----------------------------------------------------------
--20 :ALTER SESSION SET db_file_multiblock_read_count = 20;
----------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 2368 | 215K| 60 |
|* 1 | TABLE ACCESS FULL| T | 2368 | 215K| 60 |
----------------------------------------------------------
--30::ALTER SESSION SET db_file_multiblock_read_count = 30;
----------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 2368 | 215K| 46 |
|* 1 | TABLE ACCESS FULL| T | 2368 | 215K| 46 |
----------------------------------------------------------
- 강좌 URL : http://www.gurubee.net/lecture/3281
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.