• User

    MySQL: una tabella con tanti campi rallenta molto i "SELECT"?

    Sto lavorando ad un progetto i cui una delle tabelle ha ben 23 campi.

    In tabelle così grandi i tempi di elaborazione della query, nel caso di un SELECT si allungano molto?

    In caso affermativo se con un SELECT richiamo dati solo da alcuni campi, diciamo 3, le performance risentiranno comunque della "larghezza" della tabella o per il db sarà come lavorare con una tabella con soli 3 campi?

    Grazie e :ciauz:


  • Super User

    una tabella con 23 campi è una tabella con 23 campi 🙂 se fai un select solo su 3 fai comunque girare una tabella da 23 campi.
    Quindi una select su 3 campi di una tab da 23 è più lenta di una su 3 campi di una tab da 3 campi.

    nonostante questo la differenza esiste ed è ben visibile.
    ad ogni select devono girare i dischi, devono essere recuperati puntatori, indici, letti dati e, una volta preparati, devono essere inviati al chiamante.

    Fare una select che estrae SOLO i dati che servono è SEMPRE una buona cosa.

    per evidenziare le differenze puoi provare a collegarti ad un database con un modem a 56kb e fare le tue prove. vedrai che i tempi sono decisamente diversi.


  • User Attivo

    Concordo con Tymba riguardo al fatto di estrarre solo i campi necessari, tanto più se la tabella ha molti campi.
    Non capisco il ragionamento del modem a 56K che NON è una variabile da tenere conto quando si parla di estrazione da una tabella in quanto questa è fatta lato server.


  • Super User

    fatta lato server o fatta attraverso la rete usando un modem a 56k si tratta di trasferire dei dati attraverso un canale

    un bus che collega l'hd scsi è molto più veloce di un 56k.
    con il primo scenario non ti accorgi delle differenze, con il secondo si.

    non accorgendoti delle differenze rischi di sviluppare tutto il sito con query non ottimizzate, arrivare a fare 10.000 utenti unici al giorno ed il server si siede e non capire il perchè.

    l'esempio del 56k non è un test del sito è una dimostrazione che consente di palpare i risultati e toccare con mano le differenze in termini di tempo che si ottengono tra le 2 query.

    :ciauz: 😉


  • User

    quindi in definitiva dite che è meglio che la spezzi in più tabelle?


  • User Attivo

    Quanti record hai nella tabella? Perchè anche questa è una informazione essenziale. 100 o 1000 record non avrai differenze significative, 10000, 100000 decisamente si.
    Poi è importante che crei gli indici sui campi su cui fai le query.
    Prova a darci qualche info in più!


  • Super User

    non è necessario che la spezzi, non è necessario che la tieni unita, è necessario progettare bene il database 😄

    esempio classico
    se hai un tabellone con tanti campi che vengono compilati solo per alcuni record e per la maggior parte restano vuoti crea una tabella con una relazione 1 a 1
    in questo caso avrai una tabella snella per la maggior parte delle volte ed un tabellone quando serve.

    se il tabellone ha 10 record fregatene, se la tabella ha centinaia di migliaia di record allora progettala con cura e stai attento anche alla dimensione dei campi.

    progettare bene il database è fondamentale.


  • User

    Si tratta di un catalogo di prodotti, che avrà molti record, la quasi totalità dei quali utilizzerà tutti i campi. le richieste "SELECT" però utilizzeranno tutti i dati (o quasi) solo in alcuni casi, mentre in altri saranno richaimati soltanto 5 o 6 campi.

    Da quello che mi avete detto ormai ho capito che è il caso che la spezzi in più parti. Grazie per l'aiuto 🙂