OPTIMIZER_INDEX_COST_ADJ
예제) I/O Cost Model과 CPU Cost Model에서 Single Block I/O와 Multi Block I/O 비용이 어떻게 처리되는지 알아보자.
select * from t1
where c1 between 1 and 1000;
---------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
---------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 985 | 198K| 32 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 985 | 198K| 32 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 985 | | 3 |
---------------------------------------------------------------------
select * from t1
where c1 between 1 and 2000;
---------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
---------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1986 | 399K| 64 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1986 | 399K| 64 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 1986 | | 5 |
---------------------------------------------------------------------
select * from t1
where c1 between 1 and 10000;
----------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 9988 | 2009K| 292 |
|* 1 | TABLE ACCESS FULL| T1 | 9988 | 2009K| 292 |
----------------------------------------------------------
select * from t1
where c1 between 1 and 1000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 985 | 198K| 32 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 985 | 198K| 32 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 985 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select * from t1
where c1 between 1 and 2000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1986 | 399K| 64 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1986 | 399K| 64 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 1986 | | 5 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select * from t1
where c1 between 1 and 10000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 9988 | 2009K| 315 (0)| 00:00:04 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 9988 | 2009K| 315 (0)| 00:00:04 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 9988 | | 21 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select /*+ full(t1) */ * from t1
where c1 between 1 and 10000;
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 9988 | 2009K| 664 (1)| 00:00:08 |
|* 1 | TABLE ACCESS FULL| T1 | 9988 | 2009K| 664 (1)| 00:00:08 |
--------------------------------------------------------------------------
alter session set "_optimizer_cost_model"=cpu;
--set system statistics manually
begin
dbms_stats.set_system_stats('cpuspeed', 1680);
dbms_stats.set_system_stats('sreadtim', 5);
dbms_stats.set_system_stats('mreadtim', 10);
dbms_stats.set_system_stats('mbrc', 8);
end;
/
select * from t1
where c1 between 1 and 1000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 985 | 198K| 32 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 985 | 198K| 32 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 985 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select * from t1
where c1 between 1 and 2000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1986 | 399K| 64 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1986 | 399K| 64 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 1986 | | 5 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select * from t1
where c1 between 1 and 10000;
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 9988 | 2009K| 316 (1)| 00:00:02 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 9988 | 2009K| 316 (1)| 00:00:02 |
|* 2 | INDEX RANGE SCAN | T1_N1 | 9988 | | 21 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
select /*+ full(t1) */ * from t1
where c1 between 1 and 10000;
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 9988 | 2009K| 761 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| T1 | 9988 | 2009K| 761 (1)| 00:00:04 |
--------------------------------------------------------------------------
- 강좌 URL : http://www.gurubee.net/lecture/3901
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.