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 6928 게시물 읽기
No. 6928
재고조회 쿼리인데, ms-sql에 비해 시간이 너무 오래 걸립니다.
작성자
이기자(k3i2)
작성일
2006-12-05 12:13
조회수
4,531

각 테이블의 idx:자동증가 인덱스 stime: 저장시간, jdate:작업일자 입니다.

select idx,stime,jdate,물품,물품코드,단가,현재상태

from( select idx,stime,jdate,물품,물품코드,단가,\"I\"as 현재상태

from t_입고 where jdate<=:요청일자

union select idx,stime,jdate,물품,물품코드,단가,\"O\"as 현재상태

from t_출고 where jdate<=:요청일자

union select idx,stime,jdate,물품,물품코드,단가,\"B\"as 현재상태

from t_반입 where jdate<=:요청일자

union select idx,stime,jdate,물품,물품코드,단가,\"P\"as 현재상태

from t_반품 where jdate<=:요청일자

union select idx,stime,jdate,물품,물품코드,단가,\"S\"as 현재상태
from t_판매 where jdate<=:요청일자

)a where a.stime=(select max(stime) from(

select stime from t_입고 where jdate<=:요청일자

union select stime from t_출고 where jdate<=:요청일자

union select stime from t_반입 where jdate<=:요청일자

union select stime from t_반품 where jdate<=:요청일자

union select stime from t_판매 where jdate<=:요청일자)b

where a.물품코드=b.물품코드 and a.현재상태 in (\"I\",\"O\",\"B\")

order by a.물품,a.stime

 

구문은 이런형식인데,

같은구문으로 Ms-SQL과 PostgreSQL으로 테스트한결과,

Ms-SQL은 5초도 안걸리는 반면, PostgreSQL은 2분도 더 걸립니다.

더 이해가 안가는건, 자료양이 같은 매장에서 Ms-SQL은 6개월분, PostgreSQL은 겨우 3일분입니다.

Ms-SQL이 수백배 더 많다는 거죠.

PostgreSQL이 union이 늦어서 그런건가요?

좀 빠른 검색을 할려면 어떻게 해야죠?

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

데이터량(분포), 인덱스 현황 그리고 위 쿼리에 대한 실행계획등을 알려주신다면 다른분들이 보다 정확한 답변을 주실 수 있을것 같습니다.

 

 

김영우님이 2006-12-05 13:26에 작성한 댓글입니다. Edit

인덱스는 Ms-SQL,PostgreSQL 양쪽다 없구요,
데이타량 분포는 t_입고,t_출고,t_판매,t_반입,t_반품 순입니다.
실행계획이라는건 무슨 뜻인지 잘 모르겠군요. ^^;
그냥 파빌로 만든 프로그램에서 재고조회할때 쓴 쿼리문인데...
혹시 PostgreSQL가 union이 Ms-SQL에 비해 엄청나게 늦는거 아닌가요?
outer join 같은걸 많이쓰는 쿼리문은 별 차이를 못느끼겠던데,
union을 많이 쓰는 위 문장만 너무 차이가 납니다.

이기자님이 2006-12-05 15:37에 작성한 댓글입니다. Edit

UNION 이라고 특별히 느려질 거시기는 없습니다..

pgsql버전이 어떻게 되세요? 인덱스가 없이 seqscan 이면 workmem 등의 파라메터 등을 조정해 보시거나 해서 성능이 확 올라갈 수도 있습니다.

pgsql의 초기 세팅은 성능 향상을 위한게 아니라 아무데서나 잘 돌게끔 이기 때문에 그럴수도 있거든요?

workmem을 8메가 뭐 이렇게만 잡아주셔도 많은 향상이 있을 수 있습니다.

최신버전 추천이고요

 

실행계획은 쿼리 앞에 EXPLAIN ANALYZE 를 붙여주시면 보입니다. 그 결과를 보여주셔도 도움이 됩니다

신기배(소타)님이 2006-12-05 15:44에 작성한 댓글입니다.

버전은 8.1 윈도우즈용이고요.

workmem이라는걸 잘 모르겠어요. 처음 써보는 디비라 너무 모르는게 많습니다 ^^;

어디서 어떻게 조정해야되죠?


실행계획결과는 좀 긴데, 댓글로 올리긴 좀 그러니까 새글 작성으로 따로 올리겠습니다

이기자님이 2006-12-05 15:59에 작성한 댓글입니다. Edit

위 경우라면
상속기능을 사용하시면 간당하게 해결하실수있겟는데요
( 질문과는 다소 거리가 있네요)

create table t_main (
    idx int,
    stime date,
    jdate date,
    물품 text,
    물품코드 text,
    단가 int,
);

create table t_입고( typ char default 'I') inherit t_main;
create table t_출고( typ char default 'O') inherit t_main;
create table t_반입( typ char default 'B') inherit t_main;
create table t_반품( typ char default 'P') inherit t_main;
create table t_판매( typ char default 'S') inherit t_main;

이렇게 두고

select idx,stime,jdate,물품,물품코드,단가,typ
from t_main
where jdate<=:요청일자
and stime = (
    select max(stime) from t_main
    where jdate<=:요청일자
    and typ in ( 'I','O','B' )
    )
이렇게 하면 쉬울거 같은데..

가우님이 2006-12-06 12:08에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6941파티션 테이블 정렬 인덱스 문제 [2]
박난하
2006-12-05
4614
6940아래 재고쿼리관련 실행 계획 결과내용입니다. [5]
이기자
2006-12-05
3900
6939구원요청 DB가 자꾸 죽어요
dba
2006-12-05
3428
6928재고조회 쿼리인데, ms-sql에 비해 시간이 너무 오래 걸립니다. [5]
이기자
2006-12-05
4531
6927아랫분 아스키... 댓글이 안돼서 새글로... [1]
이기자
2006-12-05
3392
6926조회시 아스키값 가져오기 [2]
초보
2006-12-05
3841
6925재고조회시 조회시간이 너무 늦습니다.
2006-12-05
3515
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다