Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] produkty sugerowane
Forum PHP.pl > Forum > Bazy danych
Karen
Witam,
mam pytanie do odnośnie optymalizacji zapytania / funkcji.
Otóż potrzebuję zrobić w sklepie sugerowane produkty dla tych które zostały wcześniej zakupione.
Moje zapytanie wygląda tak:

  1. SELECT * FROM `produkty` WHERE `produkt_id` IN (SELECT `cart_pid` FROM `cart` WHERE `cart_ucode` IN
  2. (SELECT `cart_ucode` FROM `cart` WHERE `cart_pid` = '$id' GROUP BY `cart_ucode`)
  3. AND `cart_pid` <> '$id' AND cart_orderid<>'' GROUP BY `cart_pid` ORDER BY count(cart_pid) DESC) LIMIT 3

Prostymi słowy: pobiera koszyki (wszystkie produkty są w koszyku - nawet te już kupione) gdzie był dany produkt i wyświetla 3 inne posortowane częstością kupienia.
Niestety przy 100 produktach w sklepie, a 1000 w koszykach zapytanie zaczyna bardzo zamulać.

Czy mogę to jakoś zoptymalizować lub możecie poradzić jak sami z taką funkcją sobie poradziliście?

Z góry dzięki za pomoc.
ajlowju
a jestes pewien, że to zapytanie zamula? tzn. konkretnie zapytanie z bazy?
gothye
korzystaj z EXPLAIN do debugowania zapytań SQL exclamation.gif
Karen
Tak, na 100% to to zapytanie. Jak wyczyszczę koszyk to wszystko działa płynnie.
Z drugiej strony jak właśnie było to 1000 rekordów to pierwsze wywołanie tego zapytania trwało 7sek (dosłownie), a po wykonaniu tego samego zapytania ponownie (przy tym samym ID) wykonywało się od razu. Przypuszczam, że wtedy wczytuje z cachu mysqlowego.

EXPLAIN i profilowanie nic nie dawało, bo wrzucając to zapytanie przez phpmyadmina wyskakiwał biały ekran.

Przy show profile for query wyskakuje tysiące małych pakietów(?). Każde po ułamek sekundy, ale razem składają się na te 7 sek.

Sam serwer stoi na konkretnej maszynie i raczej nie jest to problem sprzętowy.
bpskiba
Tak napisane zapytanie musi powodować problemy!
Zacznij je pisać od nowa. Nie używaj również gwiazdki, a wymień nazwy pól
Twoje zapytanie będzie się zaczynać tak

  1. SELECT product_id FROM produkty
  2. JOIN cart ON......


w tym zapytaniu NIE BĘDZIE frazy ... IN (SELECT...
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.