2021. 9. 6. 20:33ㆍW.IT/W.데이터베이스
프로그램 속도 이슈가 발생하여, 원인 분석 결과.. DB 쿼리 쪽에서 시간이 많이 걸리고 있었습니다.

정확한 분석을 위해 해당 쿼리에 대한 plan을 떠보았고 조건문에 있는 칼럼 값들은 분명 index로 잘 잡혀있는데 막상 실행은 full scan으로 하고 있는 것입니다.....
그래서!! 여러 방면으로 테스트한 결과 아래와 같은 결과가 나왔습니다.
1. 별칭으로 JOIN 했을 경우
iSQL> SELECT
2 B.CELL_NO, A.CLBAK, A.ID
3 FROM 테이블1 A, 테이블2 B
4 WHERE A.SEQ = 75291
5 AND A.SEQ = B.SEQ
6 AND B.KEY = '010';
CELL_NO CLBAK ID
----------------------------------------------------------------------------------------------
010 3 A
1 row selected.
------------------------------------------------------------
PROJECT ( COLUMN_COUNT: 3, TUPLE_SIZE: 90, COST: 673755.73 )
JOIN ( METHOD: HASH, COST: 282173.95 )
SCAN ( TABLE: 테이블1 A, INDEX: 테이블1_PK, RANGE SCAN, ACCESS: 1, DISK_PAGE_COUNT: 1152, COST: 32.60 )
HASH ( ITEM_SIZE: 64, ITEM_COUNT: 1, DISK_PAGE_COUNT: 64, ACCESS: 1, COST: 282173.95 )
SCAN ( TABLE: 테이블2 B, FULL SCAN, ACCESS: 1315799, DISK_PAGE_COUNT: 20800, COST: 14125.22 )
------------------------------------------------------------
2. JOIN을 하지 않았을 경우
iSQL> SELECT
2 B.CELL_NO, A.CLBAK, A.ID
3 FROM 테이블1 A, 테이블2 B
4 WHERE A.SEQ = 75291
5 AND B.SEQ= 75291
6 AND B.KEY = '010';
CELL_NO CLBAK ID
----------------------------------------------------------------------------------------------
010 3 A
1 row selected.
------------------------------------------------------------
PROJECT ( COLUMN_COUNT: 3, TUPLE_SIZE: 90, COST: 414122.47 )
JOIN ( METHOD: STORE_NL, COST: 22540.69 )
SCAN ( TABLE: 테이블1 A, INDEX: 테이블1_PK, RANGE SCAN, ACCESS: 1, DISK_PAGE_COUNT: 1152, COST: 32.60 )
STORE ( ITEM_SIZE: 40, ITEM_COUNT: 1, DISK_PAGE_COUNT: 0, ACCESS: 1, COST: 22540.69 )
SCAN ( TABLE: 테이블2 B, INDEX: 테이블2_PK, RANGE SCAN, ACCESS: 1, DISK_PAGE_COUNT: 20800, COST: 140.34 )
3. INNER JOIN을 사용했을 경우
iSQL> SELECT
2 B.CELL_NO, A.CLBAK, A.ID
3 FROM 테이블1 A
4 INNER JOIN 테이블2 B
5 ON A.SEQ= 75291
6 AND A.SEQ = B.SEQ
7 AND B.KEY = '010';
CELL_NO CLBAK ID
----------------------------------------------------------------------------------------------
010 3 A
1 row selected.
------------------------------------------------------------
PROJECT ( COLUMN_COUNT: 3, TUPLE_SIZE: 90, COST: 809263.70 )
JOIN ( METHOD: INDEX_NL, COST: 417681.91 )
SCAN ( TABLE: 테이블1 A, INDEX: 테이블1_PK, RANGE SCAN, ACCESS: 1, DISK_PAGE_COUNT: 1152, COST: 32.60 )
SCAN ( TABLE: 테이블2 B, INDEX: 테이블2_PK, RANGE SCAN, ACCESS: 1, DISK_PAGE_COUNT: 20800, COST: 14125.22 )
------------------------------------------------------------
결론,
Table을 JOIN 할 때 각 테이블 별로 조건문 처리 또는 INNER JOIN으로 수행해야 한다.
※ 제 글에서 부족하거나 잘못된 부분이 있다면 댓글로 남겨주시길 부탁드립니다.
※ 제 글은 제가 코딩하면서 지속해서 확인하기 위한 히스토리 성 정보들이자 회사 생활 중 실제 프로그램을 코딩하며 중요하거나 필요했던 정보들을 공유하기 위해 적은 글입니다.
'W.IT > W.데이터베이스' 카테고리의 다른 글
[MySQL] MariaDB 설치 시 No package socat available 에러 (0) | 2021.08.08 |
---|---|
[Oracle] Instant Client 12.2 Commit Error (1) | 2021.07.25 |