Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długo wykonujące się zapytanie
Forum PHP.pl > Forum > Bazy danych
aras785
  1. SELECT
  2. DISTINCT SQL_CALC_FOUND_ROWS `produkty`.*
  3. ,
  4. CASE
  5. WHEN `produkty`.`cena_prom` < `produkty`.`cena`
  6. AND `produkty`.`cena_prom` > '0'
  7. THEN (
  8. CASE
  9. WHEN (`producenci`.`prowizja` IS NOT NULL AND `kategorie`.`prowizja` IS NOT NULL)
  10. THEN (`produkty`.`cena_prom` * (1 + (`produkty`.`prowizja` / 100) + (`producenci`.`prowizja` / 100) + (`kategorie`.`prowizja` / 100) ))
  11. WHEN (`producenci`.`prowizja` IS NOT NULL AND `kategorie`.`prowizja` IS NULL)
  12. THEN (`produkty`.`cena_prom` * (1 + (`produkty`.`prowizja` / 100) + (`producenci`.`prowizja` / 100) ))
  13. WHEN (`producenci`.`prowizja` IS NULL AND `kategorie`.`prowizja` IS NOT NULL)
  14. THEN (`produkty`.`cena_prom` * (1 + (`produkty`.`prowizja` / 100) + (`kategorie`.`prowizja` / 100) ))
  15. ELSE (`produkty`.`cena_prom` * (1 + (`produkty`.`prowizja` / 100) ))
  16. END
  17. )
  18. ELSE (
  19. CASE
  20. WHEN (`producenci`.`prowizja` IS NOT NULL AND `kategorie`.`prowizja` IS NOT NULL)
  21. THEN (`produkty`.`cena` * (1 + (`produkty`.`prowizja` / 100) + (`producenci`.`prowizja` / 100) + (`kategorie`.`prowizja` / 100) ))
  22. WHEN (`producenci`.`prowizja` IS NOT NULL AND `kategorie`.`prowizja` IS NULL)
  23. THEN (`produkty`.`cena` * (1 + (`produkty`.`prowizja` / 100) + (`producenci`.`prowizja` / 100) ))
  24. WHEN (`producenci`.`prowizja` IS NULL AND `kategorie`.`prowizja` IS NOT NULL)
  25. THEN (`produkty`.`cena` * (1 + (`produkty`.`prowizja` / 100) + (`kategorie`.`prowizja` / 100) ))
  26. ELSE (`produkty`.`cena` * (1 + (`produkty`.`prowizja` / 100) ))
  27. END
  28. )
  29. END AS `cena_correct`
  30. FROM `produkty`
  31. LEFT JOIN `producenci` ON `producenci`.`id` = `produkty`.`producent` LEFT JOIN `kategorie` ON `kategorie`.`id` = `produkty`.`prod_kat`


Czas wykonywania średnio 3 sekundy! i myślę, że przez to przez to serwer mysql wyciąga 100% procesora...

explain:


Proszę o pomoc
nospor
Sieczka..... wink.gif

Te podzapytanie:
LEFT JOIN (SELECT prod_id,SUM(stock) AS ilosc FROM cechy_magazyn WHERE stock>0 GROUP BY prod_id) cm ON cm.prod_id=produkty.id AND cm.ilosc>0
jest ci potrzebne?
Wywal je i sprawdz jak sie bedzie wowczas wykonywalo zapytanie. Wydaje mi się, że to może to podzapytanie ostro zamulac.
aras785
Nospor pomyliłem zapytania. Zrobiłem aktualizacje pierwszego posta. Niby proste zapytania, a tak zamula. Chodzi o LEFT JOIN... i nie wiem dlaczego tak zwalniają.
nospor
Jestes pewien ze teraz mowa o wlasciwym zapytaniu?

Wywal: DISTINCT SQL_CALC_FOUND_ROWS
przyspieszylo?

edit:
Zrob tez odwrotny myk, czyli zostaw to co kazalem ci wywalic, a wywal tego CASE. Jest tam od groma operacji i zanim zadziala DISTINCT to to wszystko musi byc wyliczone. Jesli ta opcja przyspieszy, to wywliczaj te rzeczy dopiero w php a nie na etapie zapytania
Pyton_000
Ehhh... Pobierz sobie normalnie jak człowiek produkty, a w modelu zrób sobie metodę getCorrectPrice na podstawie produktu...
CuteOne
Z tego co pamiętam to SQL_CALC_FOUND_ROWS nie wykorzystuje indeksów, to może być powodem tak długiego wykonywania zapytania, może spróbuj ze starym sprawdzonym COUNT()?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.