Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Optymalizacja zapytań, Po wykonaniu tej pętli przekracza mi limit 400000 zapytań na godzinę.
poczatkujaca12
post
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

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


Mam taki kod...
Niby nic skomplikowanego...
  1. $na = explode( '<br />', $r['npr']);
  2. $text .= "\r\n\r\nA poniżej przesyłamy linki do pobrania plików:\r\n";
  3. $kol=count($na);
  4.  
  5. for($i=0; $i < $kol; $i++){
  6. $nazw = explode( '<br />', $r['npr']);
  7. $nazwa=substr($nazw[$i], 0, -4);
  8. $zo1=mysql_query("select * from prod where nazwa='".$nazwa."'");
  9. while($k=mysql_fetch_array($zo1)){
  10. $z1=mysql_query("Select * from down where id_user='".$r['ius']."' and plik='".$k['plik']."'");
  11. if (mysql_num_rows($z1)!=0){
  12. mysql_query("update down set koniec=DATE_FORMAT(TIMESTAMPADD(DAY,+".$ldni.",now()), '%Y-%m-%d'), pobran='".$lpobran."' where id_user='".$r['ius']."' and plik='".$k['plik']."'");
  13. $text .= "\r\n ".$adres."/pobierz/".$r['ius']."/".$k['plik']."\r\n";
  14. } else {
  15. mysql_query("insert into down set id_prod='".$nazwa."', id_user='".$r['ius']."', plik='".$k['plik']."', koniec=DATE_FORMAT(TIMESTAMPADD(DAY,+".$ldni.",now()), '%Y-%m-%d'), pobran='".$lpobran."'");
  16. $text .= "\r\n ".$adres."/pobierz/".$r['ius']."/".$k['plik']."\r\n";
  17. }
  18. }
  19. }

Dodam że $kol może mieć wartość co najwyżej 3...
Więc razem powinno wygenerować max 12 zapytań.

Dlatego, że przy $kol=3 , zapytanie
$zo1=mysql_query("select * from prod where nazwa='".$nazwa."'");
też zwróci 3 rekordy

Więc za 1 obrotem for wykona 3 zapytania z pętli while (albo insert albo update w zależności od warunku if)...

Moje pytanie brzmi: czy i jak można zoptymalizować tą pętle, żeby generowała jak najmniej zapytań do bazy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sebekzosw
post
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


a nie lepiej to będzie sprawdzać przed wygenerowaniem linka ? tzn koleś wchodzi na podstronę gdzie jest ten link i na początku zostaje sprawdzany. wtedy liczba zapytań znacząco się zmniejszy bo nie każdy link będzie aktualizowany (tylko wtedy jak ktoś wejdzie)


czyli ostatecznie wyglądałoby to tak:


  1. $z1 = mysql_fetch_assoc(mysql_query("Select * from down where id_user='".$r['ius']."' and plik='".$k['plik']."'"));
  2.  
  3. if (!empty($z1))
  4. {
  5. mysql_query("update down set koniec=DATE_FORMAT(TIMESTAMPADD(DAY,+".$ldni.",now()), '%Y-%m-%d'), pobran='".$lpobran."' where id_user='".$r['ius']."' and plik='".$k['plik']."'");
  6. $text .= "\r\n ".$adres."/pobierz/".$r['ius']."/".$k['plik']."\r\n";
  7. }
  8. else
  9. {
  10. mysql_query("insert into down set id_prod='".$nazwa."', id_user='".$r['ius']."', plik='".$k['plik']."', koniec=DATE_FORMAT(TIMESTAMPADD(DAY,+".$ldni.",now()), '%Y-%m-%d'), pobran='".$lpobran."'");
  11. $text .= "\r\n ".$adres."/pobierz/".$r['ius']."/".$k['plik']."\r\n";
  12. }


oczywiście trzeba dostosować to do podstrony


mam nadzieje, że rozumiesz mój przekaz (IMG:style_emoticons/default/smile.gif)

Ten post edytował sebekzosw 25.06.2010, 09:15:54
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 08:17