Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [mysql] problema ottimizzazione query

    ciao a tutti

    ho una query di questo tipo
    codice:
    insert into prodotti (select * from prodotti_tmp where codice not in (select prodotti.codice from prodotti))
    la uso per inserire nel db reale solo i prodotti che non sono gia presenti


    il problema è che entrambe le tabelle contengono circa 15000 record, e questa query manda mysql al 100% per circa 15 minuti...

    secondo voi posso strutturare la query in un modo più efficiente? grazie
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    la uso per inserire nel db reale solo i prodotti che non sono gia presenti
    Se il problema è solo questo non sarebbe molto, ma veramente molto, più comodo giocare sulle chiavi e su dei campi "unique" per evitare di inserire un prodotto che già esiste?

  3. #3
    inizialmente lo avevo fatto usando il campo codice come primary key, ma quando provavo ad inserire un prodotto con codice = mysql dava errore (giustamente) e bloccava la query

    c'è un modo per farlo senza che la query venga bloccata?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    Originariamente inviato da nik600
    c'è un modo per farlo senza che la query venga bloccata?
    codice = 'mysql' ? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    ok la frase è contorta, volevo dire:

    quando provo ad inserire un record con codice uguale a quello di un record già inserito allora mysql da errore...
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  6. #6
    ma non è quello che cerchi? Se il tuo "prodotto" esiste già é normale che non puoi reinserirlo

  7. #7
    non è quello che voglio!

    il database dei prodotti lo aggiorno periodicamente facendo l'upload di un file di testo...nel file di testo possono esserci:

    - prodotti con lo stesso codice da aggiornare nel db
    - prodotti con un nuovo codice da inserire nel db

    se mysql da un errore al 799° record tutti gli altri vengono inseriti o no?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  8. #8
    :master: Se provi a spezzare in 2 la tua query eseguendo prima una select e solo successivamente se questa non ha prodotto risultati esegui la insert migliora qualcosa?

    es.

    codice:
    $res=mysql_query("select codice from prodotti where codice='$nuovocodice'");
    
    if(!($ligne = mysql_fetch_object ($res))) mysql_query("INSERT INTO prodotti ....);
    Almeno così fai fare un po' di lavoro anche a PHP..

    Ps. se ho scritto una vaccato mi scuso

  9. #9
    ciao

    ho seguito il tuo consiglio (più o meno)

    ora faccio cosi:

    -> upload del file in una tabella temporanea

    select * from tablella temporanea;

    while(tutti i record){

    update tabella set ... where codice=codice_corrente;

    insert into tabella (record_corrente) //senza die altrimenti si blocca

    }

    svuoto la tabella temporanea


    il tutto con circa 12000 prodotti in 10 secondi, mi sembra accettabile...grazie!
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  10. #10
    mh.. se ogni record va comunque aggiornato o aggiunto prova ad utilizzare "REPLACE" al posto di "update + insert" e prova a controllare se il tempo totale scende ancora..

    Ps. ma perchè usi una tabella temporanea e non scrivi direttamente nella tabella finale?

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.