Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Mysql&PHP]Velocizzare l'aggiornamento del database

    Salve,
    ho creato uno script che seleziona da un database parole senza l'ultima lettera accentata e la bonifica aggiungendoci la lettera accentata mancante per poi reinserirla nel database.Siccome devo scorrere circa 100000 righe e ci mette tantissimo tempo, volevo sapere se c'è qualche modo per velocizzare questo aggiornamento. Riporto il codice qui sotto:

    Codice PHP:
     <?php
    include("form_name.php");
          
          
    $s_grave$_POST['a1_grave']; // parola senza lettera accentata
          
    $c_grave$_POST['a2_grave']; // parola con la lettera accentata
          
    $db mysql_connect($db_host$db_user$db_password);
            if (
    $db == FALSE)
               die (
    "Errore nella connessione.");
             
    mysql_select_db($db_name$db)
             or die (
    "Errore nella selezione del database.");
          
    $query = ( " SELECT Title FROM links ") ;
          
    $result mysql_query($query);
          while (
    $title mysql_fetch_array($result))
          {
             
    $title $title[0];
             
    //echo "$title";
             
    $ungraved = array($s_grave);
             
    //echo "
    $ungraved[0]";
             
    $graved = array($c_grave);
             //echo "
    $graved[0]";
             
    $new_title = str_replace ( $ungraved[0]$graved[0]$title );
             //echo "
    $new_title";
             
    $query1 = ("UPDATE links SET Title '$new_title' WHERE Title '$title' ");
             
    $result1 = mysql_query($query1);
               if (mysql_query(
    $query1))
                         echo "
    [b]I dati sono stati aggiornati correttamente[/b]
    ";
                   else
                     echo "
    [b]I dati non sono stati aggiornati[/b]
    ";    
        
          }
          
        
            
    ?>
    Thanx, !!!
    ~ linux power never ends ~

  2. #2

    dimenticavo...

    Dimenticavo: questa operazione sovraccarica pesantemente la CPU e vorrei evitare che ciò avvenga per un periodo troppo lungo. Thanx !
    ~ linux power never ends ~

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    se è una cosa che devi fare una volta puo' anche durare a lungo.
    se è una cosa che devi fare spesso una soluzione e di aggiungere un flag che indicherà se il record è stato trattato o no. Creando un indice su quel flag potrai scegliere solo i record non trattati e velocizzare il trattamento.

  4. #4
    purtroppo lo devo eseguire per la prima volta... e le parole da bonificare sono davvero tante... sigh
    ~ linux power never ends ~

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quale è la percentuale di parole senza l'ultima lettera accentata ?
    Sono molte o poche rispetto al totale ?
    Se sono poche puoi fare cosi....


    codice:
    $new_title = str_replace ( $ungraved[0], $graved[0], $title );
    if ($new_title != $title ) {
     .... aggiornamento
    
    }
    Cosi aggiorni solo i record il cui valore è stato modificato.

  6. #6
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Usando solo l'sql puoi velocizzare, ad esempio se devi sostituire cioe con cioè:

    UPDATE TABELLA SET TESTO=REPLACE(TESTO,'cioe','cioè')

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Un'altra soluzione è di non aggiornare la tabella ma di fare la modifica prima della visualizzazione.

  8. #8
    Teuzzo... io non ho la parola con l'ultima lettera non accentata, io non ho proprio la lettera, ovvero ho parole tipo perch, abilit, attualit e devo bonificarle in perchè, abilità, caffè... ma il mio problema non è neanche nell'update, ma nel velocizzare questa operazione in modo da non sovraccare troppo la CPU...
    ~ linux power never ends ~

  9. #9

    penso di aver risolto

    Penso di aver risolto mettendo una condizione sulla query

    Codice PHP:
    $query = ( " SELECT Title FROM Links Title LIKE('%$s_grave%')") ; 
    in questo modo la bonifica si dovrebbe operare solo dove compare la parola associata ad $s_grave...
    Grazie per il confronto ,thanx !!!
    ~ linux power never ends ~

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.