Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [MySQL] Prestazioni

  1. #1
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273

    [MySQL] Prestazioni

    Ciao,

    mi date qualche consiglio per incrementare le prestazioni di MySQL. Ho MySQL server (normale e max) versione 4.1.

    Come posso ottimizzare al meglio il database? (a livello di config del server e impostazione delle tabelle).

    Quale formato di tabella è preferibile per grosse moli di dati e quale per maggiore velocità?

    Grazie

    PS. è normale che con 40 utenti contemporanei, MySQL beva quasi il 70% della cpu?

  2. #2
    bhe, questo dipende anke da quante query esegue ogni utente, e soprattutto QUALI QUERY.

    Molto spesso utilizzae un select * from tabella quando non ci serve conoscere tutta la riga, è uno spreco di risorse inutile...
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  3. #3
    Utente di HTML.it L'avatar di PaoDJ
    Registrato dal
    Oct 2001
    Messaggi
    273
    Nessuna query ha l'*, ho usato i limit al massimo e non ho abusato con gli indici...

    Non so più che fare...

  4. #4
    Usare select * non e' uno spreco di risorse. Mysql deve sempre estrarre tutta la tupla, poi in base alle richieste invia solo i campi scelti. Paradossalmente fa prima ad inviare tutto cosi' come', si tratta solo di occupazione di memoria. Cosi' e' con il LIMIT... si deve estrarre sempre tutte le righe, fare l'ordinamento richiesto e su questo effettuare la scelta imposta dal LIMIT.

    Se fosse abilitata la cache per le query e la query fosse SELECT * si avrebbero molte probabilita' di riutilizzare il risultato ottenuto.

    Mi pare ci siano anche articoli e pillole sull'ottimizzazione delle query.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    [supersaibal]Originariamente inviato da piero.mac
    Usare select * non e' uno spreco di risorse. Mysql deve sempre estrarre tutta la tupla, poi in base alle richieste invia solo i campi scelti. Paradossalmente fa prima ad inviare tutto cosi' come', si tratta solo di occupazione di memoria. Cosi' e' con il LIMIT... si deve estrarre sempre tutte le righe, fare l'ordinamento richiesto e su questo effettuare la scelta imposta dal LIMIT.

    Se fosse abilitata la cache per le query e la query fosse SELECT * si avrebbero molte probabilita' di riutilizzare il risultato ottenuto.

    Mi pare ci siano anche articoli e pillole sull'ottimizzazione delle query.


    [/supersaibal]
    hai appena demolito delle convinzioni che avevo anche io...
    eppure su una rivista del settore sostenevano proprio di usare LIMIT ed evitare SELECT * per ottimizzare le prestazioni. da cui ho cambiato un bel pò di query
    Errare humanum est, perseverare ovest

  6. #6
    [supersaibal]Originariamente inviato da carlo2002
    hai appena demolito delle convinzioni che avevo anche io...
    eppure su una rivista del settore sostenevano proprio di usare LIMIT ed evitare SELECT * per ottimizzare le prestazioni. da cui ho cambiato un bel pò di query [/supersaibal]
    Ciao. Buona Pasqua, carlo2002.

    E' una questione di logica. I dati sono scritti in un file. il file e' organizzato in record, i record sono suddivisi in campi. Che fa il server? Analizza il nome del file, risolve la condizione where, estrae i record filtrati dalla condizione where e se il caso costruisce una tabella temporanea, Ordina i dati secondo la richiesta di ORDER BY oppure gia' ordinati se viene applicato un indice, preleva i dati richiesti dalla SELECT e con un sender invia i dati ad un buffer di memoria da dove verranno prelevati dalla funzione di fetch o altro che sia.

    Ora se deve mandare solo qualche campo, lo deve filtrare. Se solo qualche campo a volte significa non poter utilizzare un INDEX e i dati li deve ordinare.

    Ovviamente dipende sempre dal lavoro che devi fare e dalla dimensione dei dati .... Per esempio se devi contare i record di una certa condizione userai count(*) e non mysql_num_rows che prevede l'estrazione dei dati ed i conteggio successivo.

    E' un problema anche di memoria disponibile, quindi anche dalla dimensione dei record che estrai. Se utilizzi la cache un select * puo' essere utizzato da tutti quelli che cercano la stessa tabella. Poi ognuno si stampera' solo i campi di cui avra' bisogno.





    ps. Dimenticato.. Una delle ottimizzazioni e non da poco e' quella di non utilizzare mai campi NULL, a meno che la ragione per farlo sia ben chiara e precisa.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    illuminante come sempre, però rimango un pò così in quanto mi sembra strano che su una rivista come linux pro (giu 04, p.80) sostengano di usare LIMIT e SELECT senza * per ottenere un notevole risparmio in termini di velocità.

    appena ho un pò di tempo faccio una paginetta per misurare le differenze.

    Buona pasqua anche a te
    Errare humanum est, perseverare ovest

  8. #8
    su select non ho mai fatto prove (ma immagino abbia ragione), invece su limit concordo 100% con piero.mac, ho fatto delle prove con limit 1500, 1600 e verificato che il tempo era assolutamento lo stesso che impiega a scaricare tutta la tabella
    ciao
    sergio

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.