Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Zliczanie zapytań, sprawdzanie ich itd.
Forum PHP.pl > Forum > Przedszkole
athabus
Witam,
mam 3 pytania:
1) jak sprawdzić ile dana strona (skrypt) wygenerowała zapytań do mysql. Do tej pory robiłem to w phpmyadmin ale tam sprawdzajac ile prpzybylo zapytan po przeladowaniu strony, ale phpmyadmin chyba sam z siebie dodaje kilka zapytan po kazdym odswierzeniu, wiec wyniki nie sa miarodajne.
Pewnie na forum juz bylo, ale szukam i szukam i nic nie moge znalezc.

2) czy jedno zapytanie np z rozbudowanym warunkiem przez mysql traktowane jest jako 1 zapytanie czy moze to jest kilka zapytan czyli np czy:

  1. SELECT a, b, c
  2. FROM tab1,
  3. tab 2 WHERE tab1.a=tab2.b AND tab2.b=tab2.c


jest traktowane jako 1 zapytanie czy kilka zapytan?


3) ile zapytan ze strony to za duzo - moja strona to sklep internetowy. Wyswietla sie 10 produktow (produkty sa z roznych kategorii i maja rozne cechy - kazda kategoria ma osobna tabele cech "specjalnych"). Oczywiscie jest rowniez koszyk, menu itp. Razem wychodzi mi okolo 100 zapytan na strone prezentujaca te produkty.
Wywalilem co sie dalo do sesji itd, ale sklep jest dosyc skomplikowany (jak dla mnie) i ma rozne ceny dla roznych lokalizacji, rozne rabaty na rozne produkty itp, stad rosnie liczba zapytan. Pewnie jeszcze da sie to troche zoptymalizowac ale juz chyba nie wiele.
Czy 100 zapytan w takim sklepie to duzo czy ujdzie?
ergo
ha pisze sklep w ktorym jest 15 zapytan i brak table scanow :] , 100 to chyba zdecydowanie za duzo
athabus
Wszystko chyba zalezy od aplikacji.
U mnie niestety jest w sumie jakies 30 kategorii produktow - kazdy moze miec inne cechy. Np jedne sa na wage, inne maja samki i jakies doatkowe cechy itp.
Do tego jest klika kategorii klientow, i kilka mozliwosci realizacji dostawy - w kazdym z wariantow klientxdostawa jest inna cena dla produktow. I rozne rabaty na dany produkt.
Do tego oczywiscie menu w postaci drzewka.
Jest jesze kilka takich zaleznosci. Wiec do 15 zapytan na pewno nie zejde. Min 80 zapytan mi zostanie:(

Nie ma paniki bo sobie wszystko przez cache puszcze wiec liczba zapytan ostatecznie nie bedzie duza, no ale wiadomo, ze zawsze mozna cos poprawic.
ergo
generalnie u mnie jeden produkt ma do 10-15 wlasciwosci i cech ( sklep z systemami alrmowymi wiec jest masa roznych parametrow ), i robie to 2 zapytaniami bodajze.
pozatym przeciez chyba sprawdzasz jedna konkretna mozliwosc realizacji dostawy czy tez kategorie klienta ? po co wszystkie na raz ? rabaty tez robie 1 zapytaniem, :-)
athabus
Wlasnie tak sobie teraz na spokojnie licze skad mi sie te wszyskie zapytania biora.

Mam strukture mniej wiecej taka (w duzym uproszczeniu)

tabela produkt
|cena|rabat itp|id_kategorii

tabela kategorie
|id_kategorii| nazwa kategorii | tabela_szczegolow (np. typ_produktu1)

tabela typ_produktu1
|cecha 1|cecha 2 itd


i teraz zalozmy ze na stronie sie wyswietla 10 produktow - kazdy moze byc z innej kategorii -> kazdy produkt ma id_kategorii, z kolei w tabeli kategorie mam zapisane gdzie szukac szczegolow.

Zeby wyswietlic produkt musze zatem pobrac dane o produktach (1 zapytanie) + (dla kazdego z tych 10 produktow pobrac dane szczegolowe 10 zapytan) - to juz jest 11 zapytan. Dodatkowo kilak takich zapytan aby sprawdzic ile jest w ogole w bazie produktow spelniajacych dane kryteria (3-4 zapytania). Kilka zapytan do przeliczenia odpowiednich ustawien koszyka zakupowego itp.

Razem wychodzi mi jakies 30 zapytan samej podstawy.

W sumie sam nie wiem skad bierze mi sie reszta tych zapytan jak to sobie przemyslalem ktore mam w phpmyadmin worriedsmiley.gif - stad tez moje pytanie jak mozna to dokladnie sprawdzic ile dany skrypt wygenerowal zapytan.
Czy mozna jakos w ogole odczytac te zapytania - chetnie bym zobaczyl jakie zapytnia zostaly wyslane.
ergo
proponuje to zrobic tak ze masz jedna tabele cech gdzie masz np.

id cechy | id kategorii

przypisujesz do tabeli kategorii te cechy ktore maja byc pobierane,

( wtedy 1 zapytaniem wybierasz sobie costam select cechy where kategoria =5 przykladowo

a potem masz tabele jakichstam parametrow tych cech ktore mozesz sobie wybrac zapytaniem IN (cecha1,cecha2,cecha3).

a potem sobie

zapisujesz dla produktu cos takiego:

tabela_produkty_cechy

id_produktu | id_cechy | id _parametru.

a potem jak chcesz obejrzec jakis produkt to to wszystko wybierasz jednym zapytaniem z kilkoma JOIN i po krzyku.
athabus
Przepisalem sobie wlasnie swoja klase dostepu do bazy zeby mi zliczala i zapisywala wszystkie zapytania, ktore wysyla do bazy w zmiennych.
Na strone z 10 produktami itd wychodzi mi 32 zapytania, takze nie jest zle - nie wiem skad mi sie bierze taka liczba jak ogladam pod phpmyadmin...

Co do Twojego sposobu to o czyms takim nie pomyslalem sad.gif Szkoda bo teraz juz nie poprawie calego systemu - to by wymagalo zbyt duzego nakladu pracy.

Ale w nastepnej wersji bedzie ok

czy 30-40 zapytan to nadal duzo? Chyba nie jest to tragiczna ilosc - podobno popularne skrypty takie jak phpbb czy oscommerce wywalaja wiecej.
tiraeth
Zawsze, jeżeli istnieje możliwość, należy używać jak najmniejszej ilości zapytań do bazy danych.
acztery
30-40 zapytan to za duzo. Jezeli na stronie gdzie masz 10 kategroi i masz 32 zapytania do bazy to co by bylo jak bys mial ich 30 i wypisanym pod kategoriami. ? Wydaje mi sie ze bardziej wydajnie miec na stronie glownej ok 10 zapytan. Rozwiązaniem zeby pozbyc sie paru zapytan moze menu z kategoriami na stronie glownej wpisz na sztywno w HTML . jak wejdzie sie do jakiegos dzialu to juz z mysql

PS pomysl o cachowaniu zapytan. Zawsze cos zyskasz

Oczywiscie jezeli liczba odwiedzin bedzie mala nie ma co sie bawic ale jezeli bedzie duzo odwiedzic to zajedziesz serwer.

PS ja na stronie mam ok 35 kategori , sesje na bazie itp idt i mam 4 zapytania
athabus
Cytat
Zawsze, jeżeli istnieje możliwość, należy używać jak najmniejszej ilości zapytań do bazy danych.

To sie zgadza - tylko pytanie gdzie jest ten punkt kiedy jest ich na prawde za duzo.
(wiem ze to zawsze zalezy - ale tak generalnie sie zastanawiam zeby miec poglad)

Cytat
30-40 zapytan to za duzo. Jezeli na stronie gdzie masz 10 kategroi i masz 32 zapytania do bazy to co by bylo jak bys mial ich 30

U mnie akurat ilosc kategorii nie zwieksza ilosci zapytan - po prostu jest 1 zapytanie odczytujace 10 produktow i potem do kazdego produktu zapytanie odczytujace jego (czyli kategorii) dane szczegolowe. Ale chyba faktycznie to jest jeszcze za duzo sad.gif

No coz powalcze z tym jeszcze troche - moze zejde do 20 (juz mam 1 pomysl jak usunac 10 zapytan - ale zobacze czy dam rade). Reszte sobie do cachu wrzuce i bedzie chodzic... mam nadzieje rolleyes.gif
Saddam92
chciałbym z góry przeprosić za necroposting ale znalazłszy ten temat postanowiłem napisac tu:

Czy móglby ktoś powiedzieć jak zliczać te zapytania SQL (praktycznie chodzi o to samo o co pytał się athabus w punkcie pierwszym) questionmark.gif

Czy to trzeba zrobić sobie jakąś zmienna i przy kazdym wykonanym zapytaniu zwiekszac ja o 1 czy też jest jakis bardizej zautomatyzowany mechanizm (aa.. przy okazji to jeśli jest różnica to ja wykorzystuje do łaczenia sie z baza klase mysqli)...
athabus
Odkopaleś mój archaiczny topic ;-)

Najprościej zrobić prostą klasę do wykonywania zapytań - jedno z pól takej klasy może przechowywać informacje o liczbie wywołanych zapytań. Oczywiście przy każdym wywołaniu zapytania musisz zwiększać tą zmienną.
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.