Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    68

    OPerazioni su migliaia di tuple

    FAccio una pagina php per convertire dei dati ponendo il nuovo risultato su una colonna
    l'isstruzione nel for è banale:
    codice:
    update tabella1 set campo1='$var1',campo2='$var2' where id=$id
    sul mio pc OK se max_execution_time => 60 ma sul server
    anche con max_execution_time = 60 mi dà problemi, se converto una tabella che ha 5300 record OK se provo con una da 40000 si ferma senza darmi errore a circa 15652sima riga. ma a volte arriva alla 19000° e al massimo dura 15sec prima che si fermi....ho provato anche a cambiare browser..
    un buon forum per un mondo migliore

  2. #2
    quella tua istruzione esegue una query per volta.

    Se non riesce tutto in una volta spezzalo in vari gruppi.

    il browser non ci cale proprio nella query. E' un lavoro lato server.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027

    Re: OPerazioni su migliaia di tuple

    Originariamente inviato da polo76

    sul mio pc OK se max_execution_time => 60 ma sul server
    anche con max_execution_time = 60 mi dà problemi, se converto una tabella che ha 5300 record OK se provo con una da 40000 si ferma senza darmi errore a circa 15652sima riga. ma a volte arriva alla 19000° e al massimo dura 15sec prima che si fermi....ho provato anche a cambiare browser..
    dipenderà dal carico del server, io dividerei in cicli da 10000 righe alla volta (se sei sicuro che almeno a quel numero ci arrivi con sicurezza.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    68

    FORse

    ho provato a fare 4 for differentida 10000, a mettere uno sleep....ma non va
    ho provato con update Low_priority e ignore .
    mysql_info ed error non mi dicono nulla.
    sul server che parametro dovrei vedere di settare?
    un buon forum per un mondo migliore

  5. #5

    Re: FORse

    Originariamente inviato da polo76
    ho provato a fare 4 for differentida 10000, a mettere uno sleep....ma non va
    ho provato con update Low_priority e ignore .
    mysql_info ed error non mi dicono nulla.
    sul server che parametro dovrei vedere di settare?
    Sleep al php???? ma se fai una query per volta....

    posta lo script che usi .. magari si puo' ottimizzare.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    urca non avevo capito...

    probabilmente allora va in timeout lo script, quindi lo sleep è peggio...

    la direttiva nel php.ini dovrebbe essere questa:

    codice:
    gianiaz@dune:~$ less /etc/php4/apache/php.ini | grep max_execution_time
    max_execution_time = 30     ; Maximum execution time of each script, in seconds
    gianiaz@dune:~$

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    68

    Max?

    Max_executione come detto è a 60. ma il problema rimane
    questo è il codice
    codice:
      $sql = "select id,campo1,campo2 from db";
      $res = sql_query($sql);
    
      for ($i = 0; ($row = sql_row($res, $i)); $i++)
      {
        $id = $row[0];
        $n1 =date ("Y-m-d H:i:s",$row[1]);
        $n2 = date ("Y-m-d H:i:s",$row[2]);
    
        $upd_sql = "update db set n1='$n1',n2='$n2' where id=$id";
        sql_command($upd_sql);
      }
    in pratica cambio da date di tipo intero(campo1 e campo2) a datetime inserendo il risultato in nuovo campi(n1,n2)...c'è mica una istruzione MySQL che può farlo?
    un buon forum per un mondo migliore

  8. #8
    Cosa sono quelle funzioni che usi? sql_query, sql_row ?

    Sono tue funzioni oppure di che database stiamo parlando?

    Sicuramente l'uso di WHILE migliorerebbe gia' parecchio l'algoritmo, e poi si trattasse di mysql quell'aggiornamento lo potresti fare con un solo update.
    codice:
    update db set 
    n1 = FROM_UNIXTIME(data1),
    n2 = FROM_UNIXTIME(data2)
    Ti fa tutta la tabella con una sola query e prima che tu possa tirare il fiato due volte.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    68

    Ottima

    grazie pare funzioni...
    mi dispiace non averla trovata da me ma il manuale mysql non è molto pratico ho un .chm che non fà la ricerca e sul sito non ritrovo da riscaricarlo.
    cmq se ho risolto per le date non funziona con una altra conversione (testo da convertire a UFT8)...
    un buon forum per un mondo migliore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.