Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Pomoc w przerobieniu jednego zapytania
vodkon
post 11.05.2014, 13:05:42
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 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
sazian
post 11.05.2014, 13:45:49
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 wink.gif
2)sprawdź indeksy
3)pokarz explain
Go to the top of the page
+Quote Post
Kshyhoo
post 11.05.2014, 13:56:26
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 wink.gif

Przenoszę.


--------------------
Go to the top of the page
+Quote Post
bpskiba
post 13.05.2014, 22:09:10
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?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 14.05.2014, 07:45:35
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 05:58