我有一個長查詢和explain analyze
沒有幫助。Postgreslq解釋分析:隱藏時間
的PostgreSQL的版本:9.1
目前的計劃:
http://explain.depesz.com/s/sWG
查詢:
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和Hashaggregate相隔。 Hashjoin需要1200到1600ms。隨着HashAggregate它跳轉到5645ms。
任何遇到過這個問題的人都可以解釋這個問題嗎?
我清理了你的文章並計劃了一下,但是如果你按照你想要的方式重新設置和重新格式化它,這將對你的實際模式,查詢以及你試圖實現的內容有所幫助。事實上,這有點難以遵循。 –
這只是*查詢計劃的一部分* - 您已將其中的部分內容截斷。請顯示完整的計劃。對於像這樣的大計劃,請將計劃過濾到http://explain.depesz.com/並提供一個鏈接幷包含正文副本。這對檢查大計劃非常有幫助。另外:** PostgreSQL版本和確切的查詢文本請**。當您編輯您的問題以糾正這些問題時,請在此處評論,以便Denis和我獲悉有關更改。 –
我使用您的網站,thanx的提示。我已經添加了查詢,但部分產生了,所以我很難修改。 – Sid