Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czy skrypt jest uciążliwy dla serwera
Forum PHP.pl > Forum > Przedszkole
licha
witam napisałem sobie skrypt i moje pytanie brzmi czy będzie mocno uciążliwy dla serwera jeśli będzie się wykonywał co godzinę ? Dla większej ilości użytkowników ?
  1. <?
  2.  
  3. require('conn.php');
  4.  
  5. $tymczasowa =mysql_query("SELECT akcja FROM user ");
  6. $ilosc = mysql_num_rows($tymczasowa);
  7. $i=1;
  8. while( $row = mysql_fetch_array( $tymczasowa )) {
  9. $tym =mysql_query("SELECT max_akcja FROM user WHERE id='$i'");
  10. $tym = mysql_fetch_array($tym, MYSQL_NUM);
  11. $max=$tym[0];
  12. $akcja=$row[0];
  13. $plus=$max/10;
  14. $plu=ceil($plus);
  15. $akcj=$akcja+$plu;
  16. echo"id $i <br>Akcja : $akcja <br>plus $plus<br>plu $plu<br>akcja2 $akcj<br>";
  17. if($akcj>$max)
  18. {
  19. $akcj=$max;
  20. $query="UPDATE user SET akcja=$akcj WHERE id='$i' ";
  21. mysql_query($query);
  22. }
  23. else
  24. {
  25. $query="UPDATE user SET akcja=$akcj WHERE id='$i' ";
  26. mysql_query($query);
  27. }
  28. $i++;
  29. }
  30.  
  31. ?>
bpskiba
Jakiekolwiek zapytanie puszczone w pętli jest potencjalnym źródłem problemów.
Nie musi być problemem już dzisiaj (w zależności od wielkości tabel, konfiguracji serwera itd), ale kiedyś nim będzie. To tylko kwestia czasu.
Jest to zła praktyka i należy jej unikać....
Dodam, że ten skrypt można zastąpić dwoma zapytaniami SQL, które nie będą szkodliwe dla serwera niezależnie od liczby rekordów smile.gif
viking
Mnie zastanawia po co klepanie obliczeń po stronie PHP skoro można wszystko od razu wyciągnąć z bazy? Druga sprawa, zerknij sobie na przykłady zapytań UPDATE http://stackoverflow.com/questions/1262786...on-select-query
kristaps
Cytat(bpskiba @ 28.01.2013, 19:45:25 ) *
Jakiekolwiek zapytanie puszczone w pętli jest potencjalnym źródłem problemów. Nie musi być problemem już dzisiaj (w zależności od wielkości tabel, konfiguracji serwera itd), ale kiedyś nim będzie. To tylko kwestia czasu.


Możesz rozwinąć? Jasne, powyższy przykład powinno się w całości zrealizować na SQLu, ale zastanawia mnie dlaczego Twoim zdaniem połączenie mysql_query i while musi stwarzać problemy - pomijając oczywiście skrajne przykłady?
Michasko
Chodzi o ilość zapytań generowaną w skrypcie. Załóżmy, że zmienna $ilosc (która swoją drogą nie jest dalej używana smile.gif - ale równa się ilości rekordów z pierwszego zapytania) przyjmie wartość 10000. W tej chwili wykonujesz pętle składającą się z 10.000 kroków i w każdym jej obrocie wykonujesz zapytanie (w tym przypadku nawet 2) do bazy. Niezbyt to optymalne.
kristaps
Tak, to logiczne. Po prostu zdanie zostało tak skonstruowane, że spodziewałem się złotej reguły, o której nie wiem. smile.gif
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.