2015-01-22 6 views
0

내 쿼리이 쿼리 결과를 6 초 정도 걸릴 여기최적화 된 쿼리 실행 시간

Sales1 table have 144513 Records 
Sales2 Table have 438915 Records 
items Table have 78512 Records 

SELECT unnest(array [repgroupname,repgroupname||'-' 
||masteritemname,repgroupname||'-' ||masteritemname||'-'||itemname]) AS grp 
    ,unnest(array [repgroupname,masteritemname,itemname]) AS disp 
    ,groupname1 
    ,groupname2 
    ,groupname3 
    ,sum(qty) AS qty 
    ,sum(freeqty) AS freeqty 
    ,sum(altqty) AS altqty 
    ,sum(discount) AS discount 
    ,sum(amount) AS amount 
    ,sum(stockvalue) AS stockvalue 
    ,sum(itemprofit) AS itemprofit 
FROM (
    SELECT repgroupname 
     ,masteritemname 
     ,itemname 
     ,groupname1 
     ,groupname2 
     ,groupname3 
     ,units 
     ,unit1 
     ,unit2 
     ,altunits 
     ,altunit1 
     ,altunit2 
     ,sum(s2.totalqty) AS qty 
     ,sum(s2.totalfreeqty) AS freeqty 
     ,sum(s2.totalaltqty) AS altqty 
     ,sum(s2.totaltradis + s2.totaladnldis) AS discount 
     ,sum(amount) AS amount 
     ,sum(itemstockvalue) AS stockvalue 
     ,sum(itemprofit1) AS itemprofit 
    FROM sales1 s1 
    INNER JOIN sales2 s2 ON s1.txno = s2.txno 
    INNER JOIN items i ON i.itemno = s2.itemno 
    GROUP BY repgroupname 
     ,masteritemname 
     ,itemname 
     ,groupname1 
     ,groupname2 
     ,groupname3 
     ,units 
     ,unit1 
     ,unit2 
     ,altunits 
     ,altunit1 
     ,altunit2 
    ORDER BY itemname 
    ) AS tt 
GROUP BY grp 
    ,disp 
    ,groupname1 
    ,groupname2 
    ,groupname3 

입니다.

이 쿼리를 최적화하는 방법은 무엇입니까?

PostgreSQL을 진정으로 무서운 질문이다 9.3

+1

https://wiki.postgresql.org/wiki/Slow_Query_Questions –

+0

'EXPLAIN ANALYZE <>;'출력을 제공하십시오. –

답변

0

를 사용하고 있습니다.

하위 선택에서 ORDER BY를 잃어 버리는 것으로 시작해야합니다. 순서는 외부 쿼리에 의해 무시됩니다.

그 외에도 DBMS에서 모든 노래 행에 대한 요약을 보려면 왜해야하는지 물어보십시오. 쿼리가 20 개 이상의 행을 반환하면 대답은 아니오입니다.

테이블의 외래 키가 색인되어 있는지 확인하면 더 빨리 처리 할 수 ​​있습니다 (색인은 성능에 대해 이야기 할 때마다 가장 중요한 정보입니다. 그들에 대해).

쿼리를 일반 스냅 샷으로 유지하면 성능에 미치는 영향을 완화 할 수 있습니다.