database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6417 게시물 읽기
No. 6417
댓글로 쓰기에 양이 많아서 다시 올립니다
작성자
김이수(isukim)
작성일
2005-11-13 20:11ⓒ
2005-11-13 20:31ⓜ
조회수
2,576

답변을 주셔서 감사합니다.

댓글을 보고 테스트를 해봤습니다.

쿼리는 (편하게 볼수있게 하는 방법을 알았습니다 ^^;)

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를 이용해서

직접연결해보고 그결과를 다시 올리겠습니다.

답변주신분들께 감사드립니다.

이 글에 대한 댓글이 총 1건 있습니다.

random_page_code로 해당 쿼리가 효과를 봤더라도 다른 쿼리가 느려질 수도 있다는 것을 기억하셔야 합니다. random_page_code는 디스크의 I/O 속도가 얼마나 빠른지를 pgsql에게 알려주는 수치입니다. 이 쿼리 최적화기는 이 계수를 사용해서 index를 사용하는 것이 효율적일지 sequence scan을 하는 것이 효과적인지 구별을 하는데 얻어야 하는 데 인덱스를 쓰면 오히려 늦어지는 경우가 많습니다.

가능하면 쿼리를 최적화 하는 방법을 찾아보시는 것이 좋을 것 같네요.

박성철(gyumee)님이 2005-11-16 11:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6421다른 DB의 테이블을 조인 할 수는 없나요?? [2]
김종섭
2005-11-15
2740
64208.1 에서 add_missing_from?? [3]
장효순
2005-11-15
6565
6418pgsql.so 파일에 관하여.. [1]
한종희
2005-11-14
3084
6417댓글로 쓰기에 양이 많아서 다시 올립니다 [1]
김이수
2005-11-13
2576
6414어찌하면 빨라질까요? 인덱스를 안쓰는거 같은데... [3]
김이수
2005-11-11
4069
6413SQL_ASCII 의 DB 를 UNICODE 로 변경하려면. [1]
가우나라
2005-11-11
2441
6412Group by 질문이여... [1]
조성배
2005-11-11
2079
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다