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

    MySQL Tabella troppo grande query lente

    Ciao a tutti,
    Ho un problema: ho una tabella di circa 40.000 righe, con 6 campi... se faccio una select o una qualsiasi query anche update,etc.. il tempo impiegato è di circa 0.35 secondi.
    Mentre, se la tabella è vuota, la query impiega 0.015s.

    Adesso, questo è normale ovviamente... però il problema è che io eseguo dentro un while che scorre anche (1000,3000 record) delle query su questa tabella, facendo due conti si arriva a tempi di esecuzione che superano facilmente i 10 minuti!
    E se la tabella continua a crescere la situazione peggiora. Devo sistemare questa situazione e ho pensato di usare delle tabelle temporanee (o delle visite??).

    Ad esempio, visto che nella mia pagina che opera su questa tabella, opera in realtà sempre su un sottogroppo di questa tabella (i record aventi idutente=xxxx), ho pensato di creare una tabella temporanea che raccoglie i record su cui opero.

    Nascono due problemi:
    1. (risolvibile) devo aggiornare alcuni record di questa tabella temporanea e riportare le modifiche nella tabella originale. Le modifiche devo farle sulla tabella temporanea perchè richiedono meno tempo e alla fine del processo devo svuotare la tabella temporanea nell'orginale.
    2. durante il processo di modifica dei record della tabella temporanea ho la necessità di leggere questa tabella anche da altre sessioni. Su MySQL non ho trovato riferimenti a tabelle temporanee globali

    Adesso, entrambi i problemi si potrebbero risolvere lasciando perdere le tabelle temporanee...ma come??
    Mi chiedo: non esiste un metodo che mi permetta di lavorare in piena libertà su un sottogruppo di record di una tabella X con le stesse prestazioni delle tabelle temporanee e che allo stesso tempo mi riporti le modifiche nella tabella originale al volo?

    Qual è la soluzione migliore? help

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Scusa ma sei sicuro che non sia il caso di lavorare prima sull'ottimizzazione degli indici, e magari anche del cilco while ..... 40.000 righe non sono mica tante, e anche per fare 1000 query mi sembra un po troppo 10 minuti, magari il tempo lo perde non nella query in se ma nell'esecuzione di altro codice.


  3. #3
    sto sistemando ottimizzando la logica del codice, comunque ho dovuto togliere una funzione abbastanza importante che devo fare per forza in quel modo, cioè facendo una select dentro un ciclo di 2000/3000 ripetizioni...

    mi chiedevo: ma il fatto che manca una chiave primaria (è una tabella semplice, c'è solo una UNIQUE tra due campi unique(campo1,campo2)), può influire negativamente?

  4. #4
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    non credo che conti molto per la velocità se c'è o meno una chiave primaria, quello che conta è che ci siano degli indici giusti e sopratutto che qusti vengano usati correttamente nelle query.

    Ho fatto una prova perchè i tempi indicati da te mi sembravano eccessivi, ed effettivamente lo sono, io esguo una select (mettendo in where un campo indicizzato) in soli 0,1060 secondi ..... ma su una tabella di 1.176.072 record, in cui il campo indicizzato è presente 153 volte, se poi faccio la select su una chiave unica la esegue in 0,0012 .... insomma mi sa che non stai usando i tuoi indici nelle query, altrimenti quei tempi sono realmente eccessivi.

  5. #5
    il problema è che facevo troppe query all'interno di un ciclo e il server non è molto potente, comunque ho risolto cambiando la logica del codice e inoltre ho fatto una prova con e senza chiave primaria nella tabella e il risultato cambia:
    se nella tabella è presenta una chiave primaria il tempo si dimezza!

    Grazie a tutti dell'aiuto

  6. #6
    Originariamente inviato da xes_user
    il problema è che facevo troppe query all'interno di un ciclo e il server non è molto potente, comunque ho risolto cambiando la logica del codice e inoltre ho fatto una prova con e senza chiave primaria nella tabella e il risultato cambia:
    se nella tabella è presenta una chiave primaria il tempo si dimezza!

    Grazie a tutti dell'aiuto
    Come ti ha scritto las il tuo è principalmente un problema di ottimizzazione del database.
    Il fatto che il tempo si dimezzi con l'aggiunta di una chiave primaria ne è una dimostrazione.

    Aggiungendo una chiave primaria (tra le altre cose) crei anche un indice su quel campo.

    Gli indici servono a ridurre il tempo di esecuzione di una query in quanto vengono utilizzati dal motore del database per ottenere quali righe della tabella verifica i filtri impostati.

    Puoi avere maggiori informazioni sugli indici Qua

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.