답변을 주셔서 감사합니다.
댓글을 보고 테스트를 해봤습니다.
쿼리는 (편하게 볼수있게 하는 방법을 알았습니다 ^^;)
EXPLAIN ANALYZE
SELECT C.PRESS_TYPE, B.DYEG_NO, A.ASGN_NO, A.ASGN_SEQ,
SHORT_NAME, A.STYLE_CODE,
D.CODE_NAME AS CLOTH_PART_NAME,
F.CLOTH_NAME, G.COLOR_NAME,
A.BATH_TOTAL , A.BATH_CURR, A.BATH_STAT,
A.SCHD_QTY, A.ASGN_QTY, A.ASGN_WGT, C.TEST_NO,
A.ASGN_NAME, A.SCHD_DATE, A.ODR_NO, A.ODR_SEQ
FROM SPBKAGO0 A
LEFT OUTER JOIN SPDDYEGA B ON A.ASGN_NO = B.ASGN_NO AND A.ASGN_SEQ = B.ASGN_SEQ
LEFT OUTER JOIN SPC_LINK C ON A.ODR_NO = C.ODR_NO AND A.ODR_SEQ = C.ODR_SEQ
JOIN SPACODE0 D ON A.CLOTH_PART= D.CODE AND D.CODE_TYPE = 'CLOTH_PART'
JOIN SPACUST0 E ON A.CUST_CODE = E.CUST_CODE
JOIN SPACLTH0 F ON A.CUST_CODE = F.CUST_CODE AND A.CLOTH_CODE = F.CLOTH_CODE
JOIN SPACLOR0 G ON A.CUST_CODE = G.CUST_CODE AND A.COLOR_CODE = G.COLOR_CODE
WHERE A.CUST_CODE LIKE '%'
AND C.TEST_NO IS NOT NULL
AND A.SCHD_DATE BETWEEN '2005-01-13' AND '2005-11-13'
AND B.ASGN_NO IS NULL
ORDER BY A.ASGN_NO, A.ASGN_SEQ
1) 우선 김상기님 의 조언대로 개별 조인 테스트 결과는
a) 두 테이블씩 조인 테스트
A 와 C JOIN : "Total runtime: 719.000 ms"
A 와 B JOIN : "Total runtime: 281.000 ms"
A 와 D JOIN : "Total runtime: 359.000 ms"
A 와 E JOIN : "Total runtime: 359.000 ms"
A 와 F JOIN : "Total runtime: 719.000 ms"
A 와 G JOIN : "Total runtime: 734.000 ms"
b) 테이블 한개씩 빼봄
B 를 뺏을때 : "Total runtime: 1328.000 ms"
C 를 뺏을때 : "Total runtime: 375.000 ms"
D 를 뺏을때 : "Total runtime: 422.000 ms"
E 를 뺏을때 : "Total runtime: 438.000 ms"
F 를 뺏을때 : "Total runtime: 422.000 ms"
G 를 뺏을때 : "Total runtime: 359.000 ms"
B를 뺏을때 속도가 현저히 늦어지네요??
그리고 JOIN의 순서를 바꿔보았는데 순서는 현재의 순서가 제일
빠릅니다.
2) 박성철님이 조언해주신 random_page_code값 수정 테스트
결과입니다
2.0, 2.1 : "Total runtime: 469.000 ms"
2.2, 2.3, 2.4 : "Total runtime: 656.000 ms"
2.5, 2.6, 2.7, 2.8, 2.9 : "Total runtime: 703.000 ms"
조인된 테이블중 빼도되는것은 없고,
2개씩 조인에서는 C 테이블, 한개씩 빼볼때는 B 테이블의 영향이
제일 큰데 사실 B와 C 테이블의 목적은
어느 두 테이블의 키값 만을 가지고 있는 연결용 테이블입니다.
예를 들면,
X테이블 : 가공작업관련테이블
Y테이블 : 염색관련테이블(여러 가공작업을 묶어 염색가능)
Z테이블 : 가공작업번호,염색번호,등록일 로구성된 테이블
이런식의 구성입니다.
X테이블에 Y테이블의 염색번호(키값) 를 가지는 필드를 넣는게 더
빠를까요? (요건 질문)
암튼 그래서 현재 까지의 제 PC상의 테스트 결과로,
(화요일쯤 업체가서 해야겠지만)
박성철님의 random_page_code 수정방법을 적용해보고
기존에 ODBC를 이용하던걸 PgOleDb.dll를 이용해서
직접연결해보고 그결과를 다시 올리겠습니다.
답변주신분들께 감사드립니다.
|