sql index 의 이용
프로그래밍 2008. 3. 25. 19:36 |조인방식이 HASH JOIN -> NESTED LOOP JOIN으로
데이타 엑섹스 경로는 FULL SCAN -> INDEX (RANGE SCAN) 으로 변경
튜닝전 Execution Plan (인덱스 생성 전 )
--------------------------------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=92 Card=1 Bytes=105)
1 0 SORT (GROUP BY) (Cost=92 Card=1 Bytes=105)
2 1 VIEW (Cost=86 Card=1 Bytes=105)
3 2 SORT (GROUP BY) (Cost=86 Card=1 Bytes=183)
4 3 HASH JOIN (Cost=79 Card=1 Bytes=183)
5 4 HASH JOIN (Cost=76 Card=1 Bytes=115)
6 5 TABLE ACCESS (BY INDEX ROWID) OF 'table a' (Cost=1 Card=1 Bytes=65)
7 6 INDEX (SKIP SCAN) OF 'table a' (UNIQUE) (Card=1)
8 5 TABLE ACCESS (FULL) OF 'table b' (Cost=74 Card=1 Bytes=50)
9 4 TABLE ACCESS (FULL) OF 'table c' (Cost=2 Card=1 Bytes=68)
CREATE INDEX [user 계정].[생성 INDEX명] ON [user 계정].[table b]([column x], [column y])
TABLESPACE [table space명];
튜닝후 Execution Plan (인덱스 생성 후 )
--------------------------------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=19 Card=1 Bytes=105)
1 0 SORT (GROUP BY) (Cost=19 Card=1 Bytes=105)
2 1 VIEW (Cost=13 Card=1 Bytes=105)
3 2 SORT (GROUP BY) (Cost=13 Card=1 Bytes=183)
4 3 HASH JOIN (Cost=6 Card=1 Bytes=183)
5 4 TABLE ACCESS (BY INDEX ROWID) OF 'table b' (Cost=2 Card=1 Bytes=50)
6 5 NESTED LOOPS (Cost=3 Card=1 Bytes=115)
7 6 TABLE ACCESS (BY INDEX ROWID) OF 'table a' (Cost=1 Card=1 Bytes=65)
8 7 INDEX (SKIP SCAN) OF 'PK_table a' (UNIQUE) (Card=1)
9 6 INDEX (RANGE SCAN) OF '[생성 INDEX명]' (NON-UNIQUE) (Cost=1 Card=1)
10 4 TABLE ACCESS (FULL) OF 'table c' (Cost=2 Card=1 Bytes=68)
무려 92에서 19로의 드라마틱한 퍼포먼스 향상.
이런 엄청난 차이라니. 공부해서 남주나요.