Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pierwsze zapytanie trwa 3 sekundy a później 0,001 :(
TomASS
post 24.09.2014, 11:27:11
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Cześc - mam takie zapytanie:
  1.  
  2. SELECT
  3.  
  4. AVG( IF(DR.rodzaj ='CCC',
  5. ((DRP.cena1)-(DRP.rabat1+DRP.rabat2+DRP.rabat3+DRP.rabat4+DRP.rabat5)),
  6. IF(DR.rodzaj ='WWW',
  7. IF((P.flaga1 = '1' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%'),
  8. (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4),
  9. (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4+DRP.rabat5)),
  10. IF(P.flaga2 = '1' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%' OR P.oznaczenie LIKE '%BBB%',
  11. (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3-DRP.rabat4-DRP.rabat5),
  12. (DRP.cena1-(DRP.rabat1+DRP.rabat2)-DRP.rabat3+DRP.rabat4-DRP.rabat5-DRP.rabat6))) )) AS Srednia
  13.  
  14. FROM
  15. cennik_pozycje AS DRP LEFT JOIN
  16. cennik AS DR ON DR.id = DRP.id_cennik LEFT JOIN
  17. miejsca_dostaw AS MD ON DRP.id_miejsce = MD.id LEFT JOIN
  18. produkty AS P ON P.id = DRP.id_produkt
  19. WHERE
  20. MD.id_klient = 5000002 AND
  21. P.id IN (100000001,100000002) AND
  22. DR.STATUS = 'aktualny' AND
  23. DR.miejsce = 'akt' AND
  24. DRP.miejsce = 'akt' AND
  25. 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
  1. MD.id_klient = 5000002 AND
  2. 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 sad.gif

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


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:28