SELECT AVG( IF(DR.rodzaj ='CCC', ((DRP.cena1)-(DRP.rabat1+DRP.rabat2+DRP.rabat3+DRP.rabat4+DRP.rabat5)), IF(DR.rodzaj ='WWW', IF((P.flaga1 = '1' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%'), (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4), (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4+DRP.rabat5)), IF(P.flaga2 = '1' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%', (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4-DRP.rabat5), (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3+DRP.rabat4-DRP.rabat5-DRP.rabat6))) )) AS Srednia FROM cennik_pozycje AS DRP LEFT JOIN cennik AS DR ON DR.id = DRP.id_cennik LEFT JOIN miejsca_dostaw AS MD ON DRP.id_miejsce = MD.id LEFT JOIN produkty AS P ON P.id = DRP.id_produkt WHERE MD.id_klient = 5000002 AND P.id IN (100000001,100000002) AND DR.STATUS = 'aktualny' AND DR.miejsce = 'akt' AND DRP.miejsce = 'akt' AND DR.rodzaj IN('CCC','WWW','LLL');
Nic wielce podniecającego - liczenie średniej. Średnia liczy się w zależności od pola DR.rodzaj wg różnych pól (czasmi się odejmuje rabaty, czasasmi nie - w zależnosci od DR.rodzaj).
Złączeń jest kilka - od cennika, po pozycje w cenniku, w zależności od klienta oraz produktu.
Wykonuje te zapytanie około 100 razy gdzie zmienia się pole id_klient oraz P.id
MD.id_klient = 5000002 AND P.id IN (100000001,100000002) AND
Problem w tym, że za pierwsyzm razem te zapytanie (z takimi parametrami jak wyżej) wykonuje się 3,5 sekundy (co przy 100 daje czas około 5-6min), a po ponownym uruchomieniu (np. po minucie) - z tymi samimi parametrami - już tylko 0,001s

Nie wiem co zoptymalizować - indeksy są, nie jest to coś skomplikowanego. Może te IFy w AVG? Tylko jak je obejść?