Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z optymalizacją tabeli.
patrykt
post
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 3.12.2005

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


witam. optymalizuje 60 000 rekordów w tabeli ale trwa to koszmaaaaarnie wolno.
zerkniecie gdzie kod jest walnięty, że tak długo to trwa?

poniższy kot zapętlam kilka razy a dokument odświeżam sobie z ajaxa.

  1. <?
  2.  
  3. $r = mysql_query("SELECT * FROM pozycjonowanie_log WHERE odc='' LIMIT 1") or die(mysql_error());
  4. $p = mysql_fetch_array($r);
  5.  
  6. $pocz_dnia = mktime(0,0,0,date("m",$p['data']),date("d",$p['data']),date("Y",$p['data']));
  7. $kon_dnia = mktime(0,0,0,date("m",$p['data']),date("d",$p['data'])+1,date("Y",$p['data']));;
  8.  
  9. $r1 = mysql_query("SELECT MAX(id) AS id FROM pozycjonowanie_log WHERE data>=".$pocz_dnia." AND data<".$kon_dnia." AND slowo='".$p['slowo']."' AND odc=''") or die('m '.mysql_error());
  10. $p1 = mysql_fetch_array($r1);
  11. $r2 = mysql_query("DELETE FROM pozycjonowanie_log WHERE data>=".$pocz_dnia." AND data<".$kon_dnia." AND slowo='".$p['slowo']."' AND odc='' AND id!=".$p1['id']) or die(mysql_error());
  12. $r3 = mysql_query("UPDATE pozycjonowanie_log SET odc=".time()." WHERE id=".$p1['id']) or die(mysql_error());
  13.  
  14. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mysz
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

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


Zacznij od wyciągnięcia pierwszego selecta ($r) poza Twoje zapętlenie, i wywal z niego limita. I wtedy dopiero wrzuć to w pętlę.
Nie wywołuj tyle razy date() i time() - to funkcje odwołujące się do systemu, więc i dużo zajmuje ich wywołanie. Pobierz sobie potrzebne Ci dane raz i zmiennych, i używaj ich. Poniżej w liniach 6 i 7 masz 6 wywałań date(), a może być tylko 1.
Zamiast 'data>=".$pocz_dnia." AND data<".$kon_dnia."' użyj BETWEEN.
Nie wiem jak to wygląda w innych częściach systemu, ale jeśli dasz radę to spróbuj sobie gdzieś keszować warotść MAX(id) i nie pobierać tego za każdym razem - żeby znaleźć tą wartość MySQL za każdym razem sprawdza wszystkie rekordy w bazie.

To tak na pierwszy rzut oka, może jeszcze ktoś coś dopowie ciekawego :)
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: 27.12.2025 - 06:53