나는 긴 쿼리를 사용했으며 explain analyze
은 도움이되지 않습니다. 의 PostgreSQLPostgreslq 설명 분석 : 숨김 시간
버전 : 9.1
현재 계획 :
http://explain.depesz.com/s/sWG
쿼리 : 몇 초는 HashJoin와 Hashaggregate 사이에 경과처럼
SELECT temps_mois.rfoperyea AS c0,
dwhinv.dwhinv___rfovsnide AS c1,
rfoadv_1.rfoadvsup AS c2,
rfoadv_2.rfoadvsup AS c3,
rsaaev_3.rsaaevsup AS c4,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '17' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m0,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '18' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m1,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '15' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m2,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '16' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m3,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '20' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m4,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '17' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m5,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '18' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m6,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '15' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m7,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '19' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m8,
Sum((CASE
WHEN dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '16' THEN dwhinv.dwhinvqte
ELSE 0
END)) AS m9
FROM rfoper_temps_mois AS temps_mois,
dwhinv AS dwhinv,
rfoadv AS rfoadv_1,
rfoadv AS rfoadv_2,
rsaaev AS rsaaev_3
WHERE (temps_mois.rfoper___rforefide = 'REF')
AND (dwhinv.dwhinv___rforefide = 'REF'
AND ((dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '17')
OR (dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '18')
OR (dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '15')
OR (dwhinv.dwhinv___rfodomide = 'LABO'
AND dwhinv.dwhinv___rfoindide = '16')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '20')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '17')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '18')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '15')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '19')
OR (dwhinv.dwhinv___rfodomide = 'ANAPATH'
AND dwhinv.dwhinv___rfoindide = '16')))
AND dwhinv.dwhinvdtd = temps_mois.rfoperdtd
AND temps_mois.rfoperyea IN ('2011', '2012')
AND dwhinv.dwhinv___rfovsnide = 'version'
AND (rfoadv_1.rfoadv___rfovdeide = 'STRC'
AND rfoadv_1.rfoadvrvs = 1
AND rfoadv_1.rfoadv___rforefide = 'REF')
AND dwhinv.dwhinv_d2rfodstide = rfoadv_1.rfoadvinf
AND rfoadv_1.rfoadvsup = 'REF'
AND (rfoadv_2.rfoadv___rfovdeide = 'STRC_REF'
AND rfoadv_2.rfoadvrvs = 1
AND rfoadv_2.rfoadv___rforefide = 'REF')
AND dwhinv.dwhinv_p2rfodstide = rfoadv_2.rfoadvinf
AND rfoadv_2.rfoadvsup IN ('01', '04', '05', '06',
'07', '99', 'REF', 'CR2107',
'CR2108', 'CR2109', 'CR2110', 'CR2111',
'CR2114', 'CR2116', 'CR2126', 'CR4101',
'CR4201')
AND (rsaaev_3.rsaaev___rsavedide = 'PRESTA_ACTE'
AND rsaaev_3.rsaaevrvs = 1
AND rsaaev_3.rsaaev___rforefide = 'REF')
AND dwhinv.dwhinv___rsaedtide = rsaaev_3.rsaaevinf
AND rsaaev_3.rsaaevsup IN ('PRISE_EN_CHARGE', 'REG_EXT',
'REG_HOSPI_SEANCE')
GROUP BY temps_mois.rfoperyea,
dwhinv.dwhinv___rfovsnide,
rfoadv_1.rfoadvsup,
rfoadv_2.rfoadvsup,
rsaaev_3.rsaaevsup
보인다. Hashjoin은 1200-1600ms가 소요됩니다. HashAggregate를 사용하면 5645ms로 이동합니다.
이 문제를 만난 다른 사람이 차이점을 설명 할 수 있을까요?
게시물을 정리하고 약간 계획을 세웠지 만, 실제 스키마, 쿼리 및 달성하려는 내용과 함께 원하는대로 다시 표현하고 다시 형식을 지정하면 도움이됩니다. 상황이 그렇듯이 따라하기가 어렵습니다. –
이것은 쿼리 계획 *의 일부일뿐입니다. 당신은 그 부분을 잘라 냈습니다. 전체 계획을 보여주십시오. 이와 같은 큰 계획의 경우 http://explain.depesz.com/에 계획을 지나서 텍스트 사본을 포함하여 링크를 제공하십시오. 큰 계획을 검토하는 데 매우 도움이됩니다. 또한 : ** PostgreSQL 버전 및 정확한 쿼리 텍스트 **를 참조하십시오. Denis와 내가 변경 사항을 통지받을 수 있도록 문제를 수정 한 경우 여기에 의견을 남기십시오. –
나는 팁을 사용하여 thanx를 사용합니다. 쿼리를 추가했지만 부분적으로 생성되어 수정할 필요가 없습니다. – Sid