Ciao. Buona Pasqua, carlo2002.[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]
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.