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%)
-----


Nie mówiłem nic o wyjmowaniu date() z pętli. Mówiłem o jego jednokrotnym wywołaniu.

Zamiast
  1. <?php
  2. date("m",$p['data']),date("d",$p['data']),date("Y",$p['data'])
  3. ?>

zrób
  1. <?php
  2. $date = explode('-', date('m-d-Y', $p));
  3. ?>

i później podstawiaj tylko
  1. <?php
  2. $date[0]
  3. ?>


Tylko kurczę, jak teraz na to patrzę, to mam wrażenie że robisz dokładnie to samo 2 razy. Zdaje się że w polu 'data' tabeli 'pozycjonowanie_log' masz timestampa, którego używasz w date do pobrania danych typu rok etc, żeby z tych danych uzyskać... timestampa?

Co do MAX(id) - tutaj jest nieco więcej zmian.
Chodzi o to, żebyś przy każdym insert-cie zapisywał sobie w jakimś polu najnowszą wartość ID. Musisz tylko pamiętaćo uaktualnianiu tego pola przy każdym insercie.
Dzięki temu unikniesz wywołania MAX(), ponierając tylko pojedynczą wartość tego pola...

Nie wiem tylk oczy da się to u Ciebie w dokładnie taki sposób wykonać, nie znam systemu, ani nie mam czasu się nad tym zanadto zastanawiać, to było tylko to co mi się rzuciło w oczy patrząc na Twój kod.

Ojoj, chyba coś spi*** w kodzie forum, bo się fajnie cudzysłowia eskejpują... :)
EDIT: a, to tylko przy podglądzie :)

Ten post edytował mysz 7.12.2006, 15:19:10
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: 26.12.2025 - 18:32