------------------------------------------------------------------------------------------------------------------------------
A-0 select /*+ 힌트없음 */ * from big_table X order by owner; -- Table Full Scan [전체범위처리] 5.69s
=> 힌트 사용을 하지 않은 단순한 select 이기 때문
A-0-1 select /*+ index(X) */ * from big_table X order by owner; -- index full scan of pk(id) [전체범위처리] 132.53s
=> 모르겟음
A-0-2 select /*+ FIRST_ROWS */ * from big_table X order by owner; -- index full scan of x01 [부분범위처리] 0.96s
=> first row 힌트를 사용하였기 때문에 부분범위처리
------------------------------------------------------------------------------------------------------------------------------
A-1. select /*+ 힌트없음 */ * from big_table X order by created; --Table Full Scan [전체범위처리]
=> 힌트 사용을 하지 않은 단순한 select 이기 때문
A-1-1 select /*+ index(X) */ * from big_table X order by created; --Index Full Scan of pk [전체범위처리]
=>
A-1-2 select /*+ FIRST_ROWS */ * from big_table X order by created; --Table Full Scan [전체범위처리]
=> created가 선행컬럼이 아니라 created기준으로 정렬이 되어 있지않음
------------------------------------------------------------------------------------------------------------------------------
A-2. select /*+ 힌트없음 */ * from big_table X where owner='SYS' order by created; --Table Full Scan [전체범위처리]
=> where 조건절의 값이 많아 굳이 인덱스를 타기 보다 full scan을 하는 것이 더 효율적
A-2-1.select /*+ index(X) */ * from big_table X where owner='SYS' order by created; --Index Full Scan of pk [전체범위처리]
=> 위의 이유와 같이 SYS의 양이 압도적으로 많아 index를 타더라도 full scan을 한다
A-2-2.select /*+ FIRST_ROWS */ * from big_table X where owner='SYS' order by created; --Index RangeScan of x01 [부분범위처리]
=>
------------------------------------------------------------------------------------------------------------------------------
A-3. select /*+ 힌트없음 */ * from big_table X where owner='APPQOSSYS' order by created; --Index RangeScan of x01 [부분범위처리]
=> index사용이 더 효율적이라고 판단함, 조건절의 값이 많이 없거나? 하는 이유로
A-3-1.select /*+ index(X) */ * from big_table X where owner='APPQOSSYS' order by created; --Index RangeScan of x01 [부분범위처리]
=> index사용이 더 효율적이라고 판단함, 조건절의 값이 많이 없거나? 하는 이유로
A-3-2.select /*+ FIRST_ROWS */ * from big_table X where owner='APPQOSSYS' order by created; --Index RangeScan of x01 [부분범위처리]
=> where절에 x01 인덱스의 선두컬럼이 있기 때문
------------------------------------------------------------------------------------------------------------------------------
B-1. select /*+ 힌트없음 */ * from big_table X order by id; -- Index Full Scan of pk [부분범위처리]
=> Table Full Scan보다 cost 낮다고 판단
B-1-1.select /*+ index(X) */ * from big_table X order by id; -- Index Full Scan of pk [부분범위처리]
=> order by 절에 id가 있으면서 pk가 id이기 때문
B-1-2.select /*+ FIRST_ROWS */ * from big_table X order by id; -- Index Full Scan of pk [부분범위처리]
=>
B-1-3.select /*+ index(X x01) */ * from big_table X order by id; -- Index Full Scan of pk [전체범위처리]
=> X
------------------------------------------------------------------------------------------------------------------------------
B-2. select /*+ 힌트없음 */ * from big_table X where owner = 'SYS' order by id; -- Index Full Scan of pk [부분범위처리]
=> sys 값이 많이 없어 full table scan 보다 인덱스를 타는것이 효율적이라 생각
B-2-1.select /*+ index(X) */ * from big_table X where owner = 'SYS' order by id; -- Index Full Scan of pk [부분범위처리]
=> sys 값이 많이 없어 full table scan 보다 인덱스를 타는것이 효율적이라 생각
B-2-2.select /*+ FIRST_ROWS */ * from big_table X where owner = 'SYS' order by id; -- Index Full Scan of pk [부분범위처리]
=>
------------------------------------------------------------------------------------------------------------------------------
(23.02.24추가) -- 성능고도화2권 p.368
A-4. select /*+ 힌트없음 */ * from big_table X order by owner, created; --Table Full Scan [전체범위처리]
=>
A-4-1.select /*+ FIRST_ROWS */ * from big_table X order by owner, created; -- Index Full Scan of x01 [부분범위처리]
=> first row를 가장 빨리 찾을 수 있는 방법이 인덱스를 통한 것이기 떄문