Toad for Oracle 툴을 사용하여
A(마스터), B(디테일) 테이블 간 조인 힌트 3가지 (USE_NL, USE_MERGE, USE_HASH) 플랜 결과입니다.
아래 플랜 중 어떤 내용을 보고 어느 조인 힌트를 주는것이 적합한지 확인할 수 있는건가요?
제가 알기론 Cost(비용)이 낮으면 더 좋다 라고 알고 있는데 제가 알고있는 내용이 맞는지
고수님들의 설명 부탁드리겠습니다
1. /* USE_NL(TABLE1, TABLE2) */
Plan hash value: 508370532
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 1470 | 11 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 5 | 1470 | 11 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL | TABLE1 | 4 | 536 | 3 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | TABLE2_IDX01 | 1 | | 1 (0)| 00:00:01 |
| 5 | TABLE ACCESS BY INDEX ROWID| TABLE2 | 1 | 160 | 2 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------
2. /* USE_MERGE(TABLE1, TABLE2) */
Plan hash value: 84301262
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 1470 | 23 (5)| 00:00:01 |
| 1 | MERGE JOIN | | 5 | 1470 | 23 (5)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID | TABLE1 | 4 | 536 | 4 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | TABLE1_IDXPK | 4 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 5 | 800 | 19 (6)| 00:00:01 |
| 5 | TABLE ACCESS FULL | TABLE2 | 5 | 800 | 18 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------
3. /* USE_HASH(TABLE1, TABLE2) */
Plan hash value: 2744198516
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 1470 | 22 (5)| 00:00:01 |
|* 1 | HASH JOIN | | 5 | 1470 | 22 (5)| 00:00:01 |
| 2 | TABLE ACCESS FULL | TABLE1 | 4 | 536 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL | TABLE2 | 5 | 800 | 18 (0)| 00:00:01 |
------------------------------------------------------------------------------
초가 누적이라고 말씀해주셔서 데이터 좀 많은 테이블로 테스트해봤는데
이해가 잘안되네요ㅜㅜ4초가 누적인가요? 1초 나온건 무엇인지 궁금하네요
Plan hash value: 3508590408
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 68434 | 10M| 317 (2)| 00:00:04 |
|* 1 | HASH JOIN RIGHT OUTER | | 68434 | 10M| 317 (2)| 00:00:04 |
| 2 | TABLE ACCESS BY INDEX ROWID| CMCODE | 7 | 385 | 5 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | CMCODE_IDX01 | 7 | | 2 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL | CMPOST | 68434 | 6616K| 312 (2)| 00:00:04 |
---------------------------------------------------------------------------------------------