Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Pomoc w przerobieniu jednego zapytania
vodkon
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 8.02.2011

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


Otóż obecne zapytanie nie wiedzieć czemu wykonuje się prawie 40s (1and1 hosting) na localhost trwa 0.8s (webserv)

Jak można by było przerobić oto takie zapytanie. Proszę o bardzo szybką odpowiedz! z góry dziękuje (IMG:style_emoticons/default/smile.gif)

  1. SELECT * FROM log WHERE id IN (SELECT MAX(id) FROM log GROUP BY z, login) AND prolog = '71' ORDER BY id DESC


chodzi o to że po usunięciu " id IN (SELECT MAX(id) FROM log GROUP BY z, login) " ładowanie trwa kilka mili sekund..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


1)problem niema związku z php (IMG:style_emoticons/default/wink.gif)
2)sprawdź indeksy
3)pokarz explain
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(sazian @ 11.05.2014, 14:45:49 ) *
1)problem niema związku z php (IMG:style_emoticons/default/wink.gif)

Przenoszę.
Go to the top of the page
+Quote Post
bpskiba
post
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


pytanie jest źle napisane. Operator IN jest bez sensu, czemu ma służyć grupowanie?(IMG:style_emoticons/default/questionmark.gif)

może tak:
  1. SELECT * FROM LOG
  2. WHERE
  3. prolog='71'
  4. ORDER BY id DESC
  5. LIMIT 1
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





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

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


@bpskiba, to co napisałeś to ZUPEŁNIE różne zapytanie. Twoje zwróci jeden rekord, a @vodkona w założeniach ma zwracać najświeższe rekordy wg "z, login".
@vodkon - spróbuj tak:
  1. SELECT * FROM log JOIN (SELECT z, login, MAX(id) id FROM log GROUP BY z, login) sub ON sub.id=log.id WHERE prolog = '71' ORDER BY id DESC

Gdyby działało nadal długo to:
1. index na "z, login"
2. index na "prolog"
3. dorzucenie "WHERE prolog='71'" do sub
4. całkowita zmiana zapytania

Ten post edytował mmmmmmm 14.05.2014, 07:46:06
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: 22.08.2025 - 23:12