Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dwa takie same zapytania, różne czasy
e-y-e
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 15.07.2010

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


Nie rozumiem dlaczego z pozoru dwa takie same zapytania wykonują się w tak różnym czasie

To zapytanie wykonuje się w czasie mniejszym niż sekunda i zwraca 116 idków
  1. SELECT c.id_kategorii FROM produkt c GROUP BY c.id_kategorii HAVING COUNT(c.id_kategorii)< 20;



Tego zapytania nie udało się wykonać, po 10 minutach przerwałem operację
  1. SELECT * FROM kategoria k WHERE
  2. k.id IN (SELECT c.id_kategorii FROM produkt c GROUP BY c.id_kategorii HAVING COUNT(c.id_kategorii)< 20);



To zapytanie jest takie samo jak wyżej, tylko zamiast pod zapytania z palaca są wpisane id których jest w sumie 116, i wykona się w czasie krótszym niż sekunda....
  1. SELECT * FROM kategoria k WHERE
  2. k.id IN (z palaca wpisane 116 idków);


Moje pytanie brzmi dlaczego jest taka duża różnica w czasie wykonania tego drugie zapytania skoro na moją logikę powinno ono trwać czas podzapytania + czas głównego zapytania. Co nie powinno trwać dłużej niż sekundę, a jednak trwa nieokreśloną ilość czasu.....

Dlaczego?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


"Fantastyczny" sposób korzystania z podzapytań przez MySQL (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@mmmmmmmm za to Twój post jest "fantastycznym" przykładem udzielania odpowiedzi.....

@e-y-e tu ci do niczego podzapytanie nie jest potrzebne. Całość realizujesz zwykłym zapytaniem z LEFT JOIN
  1. SELECT k.* FROM kategoria k
  2. LEFT JOIN produkt c ON c.id_kategorii=k.id
  3. GROUP BY c.id_kategorii HAVING COUNT(c.id_kategorii)< 20

i już.
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


@Nospor z całym respectem jakim Cię dażę ale jaki sens ma:

  1. GROUP BY c.id_kategorii HAVING COUNT(c.id_kategorii)< 20


(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Sephirus i ja również z całym szacunkiem jaki do Ciebie mam, ale o co Tobie chodzi?

Autor chce pobrać tylko te kategorie, które nie mają więcej niż 20 produktów. Jeśli nie rozumiesz jego logiki, to pytaj się jego czemu chce pobrać tylko takie kategorie (IMG:style_emoticons/default/smile.gif) Ja mu tylko pomagam to zrealizować.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


@nospor, nie rozumiem o co ci chodzi. @e-y-e pytał dlaczego jest taka różnica i udzieliłem mu POPRAWNEJ odpowiedzi na pytanie.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Sorki, nie doczytałem końcówki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 20:34