Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt się długo wykonuje (zapytanie SQL)
wddigital
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 25.07.2011

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


Dlaczego takie coś:

  1. $q = mysql_query('SELECT * FROM `tabela1` WHERE `uzytkownik`="'.$nick.'" ORDER BY `id` DESC LIMIT 25');
  2. while($q1 = mysql_fetch_array($q))
  3. {
  4. $q2 = mysql_query('SELECT data1, data2 FROM `tabela2` WHERE `pole1`="'.$q1['dane1'].'" AND `pole2`="'.$q1['dane2'].'" ORDER BY `data1` DESC LIMIT 1');
  5. }


Wykonuje mi się około 8-10 sekund? Jest to bardzo niewygodne w przeglądaniu moich rekordów, a tak nie powinno być. Gdzie leży błąd?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Sephirus
post
Post #2





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

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


To jest jeden z najczęstszych błędów...

I to taki fajny który skaluje się wraz ze wzrostem rekordów w tabeli 'tabela1' smile.gif

Dajesz limit 25... czyli robisz 1 zapytanie a potem 25 kolejnych.

10 sekund / 26 daje jakieś ~400 ms na zapytanie - stąd też wnioskuje że możesz mieć dodatkowy problem z indeksami.

Rozwiązanie:
1. Zapoznaj się z JOIN w MySQL
2. Sprawdź czy pola używane w WHERE, ON, ORDER mają ustawiony INDEX.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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 Aktualny czas: 19.08.2025 - 13:37