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

    problema insert in mysql

    Salve, ho un pb con un insert in una tabella mysql.
    Se faccio un inserimento da csv con Load data ci metto pochi secondi, mentre se devo leggere il file e poi faccio l'insert con sintassi mysql i tempi si allungano notevolmente.
    Quale è il pb?
    riporto la sintassi

    function importaFile($filename){

    global $CONN; //connessione al db

    if ( !$news=fopen($filename ,"r") ) //apre il file
    {
    echo "Non riesco ad aprire il file $filename \n";
    }
    else
    echo "File $filename aperto in lettura\n";

    $cont = 0;
    //leggo il file riga per riga
    while (!feof($news)) {
    $buffer = fgets($news, 4096); //in buffer ho il contenuto della riga


    $rec=substr($buffer,0,3);


    $COD_INT= substr($buffer,0,9);

    $DESCRIZIONE= substr($buffer,9,41);


    echo "$DESCRIZIONE \n";
    $sql = " ";
    $sql = "INSERT INTO ANAGRAFICA (COD_INT, DESCRIZIONE ) ";
    $sql .= "VALUES ( '$COD_INT' , '$DESCRIZIONE' ) ";
    mysql_query($sql , $CONN );

    $cont++;

    }//Fine WHile

    //Stampo riepilogo dei record inseriti
    echo "Record inseriti \t$cont\n"; //Conta record inseriti


    //chiudo il file
    fclose($news);



    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    cosa vuol dire "un inserimento da csv con Load data"? e poi di che tempi parliamo come secondi e che differenza c'è?

  3. #3
    Grazie! per aver risposto.
    LOAD DATA LOCAL INFILE... è l'importazione da csv diretto senza aprire il file e leggerlo riga per riga.
    La differenza è tra 7 per importazione diretta e 1900 secondi usando il ciclo e l'insert.

    Non riesco a capire quale sia il pb anche perchè è da poco che uso mysql, ho sempre usato SQL server.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prova a ricalcolare il tempo commentando solo la riga mysql_query($sql , $CONN ); e posta qui i risultati in secondi

  5. #5
    Grazie, del suggerimento..Sono arrivato alla soluzione.
    Praticamente esportando la tabella da SQL Server in Mysql ha creato in maniera automatica il tipo tabella "Engine" come Innodb e non come MySam. Con il tipo InnoDb fa più controlli(non so esattamente cosa perchè non ho approfondito).

    Sono passato da 1992 secondi a 21. Con l'importazione da csv sicuramente saltava la parte dei controlli ecco perchè li non cambiava nulla tenendo "InnoDB".

    Grazie mille.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Ok, ciao.

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.