konto usunięte
Temat: Postgresql - dziwne zapętlenie
Witam,czy spotkaliście się z taką sytuacją, że normalnie wykonujące sie zapytanie po zmianie parametru w warunku nagle przestalo się wykonywać i trwa..i trwa..i trwa?
Mam taką sytuacje ze jest zapytanie z agregacją danych (zliczanie) i kilkoma warunkami w where i jak wybieram przedzial czasu za np 2 miesiace (styczen-luty) to robi sie normalnie i jest ok
Jak zrobie sam styczen to 1,5 s
jak styczen + luty to 3 s
jak dodam marzec..do 10.03 to tam ok 4 se
ale jak juz dam do 14.03 ;) to koniec...
ale jak zrobie sam marzec to juz znowu jest OK i 1,5 s.
dopiero jak zakomentowalem fragment pewnego warunku to zaczelo dzialac..(dziwne bo przeciez na innym zakresie danych dzialal OK).. ale w teorii nie powinno miec wplywu bo danych w ten jeden dzien tak wiele nie przybylo... sa indeksy, zreszta podobne zapytanie albo wręcz identyczne, tylko np bez grupowania itd..dzialaja poprawnie..
select
i.lok_id,cv2.id,count(it.id) as ile
from
knf.inv_header i
left join knf.inv_item it ON (it.header_id = i.id)
left join knf.order_item oi ON (it.id=oi.inv_item_id)
left join knf.order_itmtype oit ON (oit.it_id=oi.itemtype_id)
LEFT JOIN knf.order_item oi2 on (oi.id = oi2.id-1 AND (oi2.itemtype_id in (select unnest(knf.get_category_ids('REP_TAX')))) AND oi.header_id = oi2.header_id AND oi.order_package_posnumber=oi2.order_package_posnumber)
LEFT JOIN knf.inv_item it2 ON (it2.id=oi2.inv_item_id)
left JOIN
(
select distinct oi.inv_item_id,header_id,order_package_posnumber from knf.order_item oi
left join knf.order_itmtype oit ON (oit.it_id=oi.itemtype_id)
where oit.itemtypetype_id = 3
AND oi.itemtype_id in (select unnest(knf.get_category_ids('REP_FEE_LOT')))
) as oi3 ON (oi.header_id = oi3.header_id and oi.order_package_posnumber = oi3.order_package_posnumber and oit.itemtypetype_id in (1,4))
LEFT JOIN knf.inv_item it3 ON (it3.id = oi3.inv_item_id)
left join knf.knf_customer_v2 cv2 ON (i.customer_id = cv2.id)
where
i.istate_id <> 2
and it.itemtype_id is not null
and
(it.itemtype_id in (select unnest(knf.get_category_ids('REP_LOT_PROD'))))
AND CAST(i.idate AS date) >= CAST('2013-01-01' AS date)
AND CAST(i.idate AS date) <= CAST('2013-03-10' AS date) --tu jak zmienie datę na 03-31 to kaplica..
AND (it.brutto + coalesce(it2.brutto,0)) >=0.00
AND CASE WHEN
i.itype = 'FK' THEN
(it.brutto
+coalesce(it2.brutto,0) --jesli to zakomentuje przy dacie do ..03-31 to jest ok
+coalesce(it3.brutto,0) --jesli to zakomentuje przy dacie do ..03-31 to jest ok
) <> 0
ELSE true END
GROUP BY i.lok_id,cv2.id
jakiś pomysł ? Już abstrahując od tego czy to zapytanie jest optymalne czy nie ;)Wojtek Stępień edytował(a) ten post dnia 25.04.13 o godzinie 01:18