2012-05-09 1 views
5

Mi chiedo, qual è il più veloce (o il più leggero per il database da gestire)Che è più veloce: "SELECT * FROM table" o "SELECT x, y, q FROM table" (da una tabella con 4 campi)

Diciamo, la tabella db dispone di 4 campi: x, y, z, q

ho solo bisogno di 3: x, y, q

Quale modo è il più veloce/più semplice per il database per eseguire (usando PHP) .. "SELECT * FROM table" o "SELECT x, y, q FROM table"?

Lo stesso varrebbe se il tavolo avesse 5 o più campi mentre dovevo ancora selezionare solo 3?

+0

Pensa secondo la logica più elementare. Hai una borsa con diversi tipi di palle. Ci sono persone che vogliono giocare a basket e a pallavolo. Puoi solo tirare fuori la palla da basket e la pallavolo, e lasciare il resto nella borsa. Oppure, in alternativa, puoi semplicemente svuotare l'intera borsa, recuperare la palla da basket e la pallavolo per distribuirli e lasciare il resto in posa. Quale sarebbe più facile? – TheDeadLike

risposta

10

SELECT x,y,z FROM table è più veloce perché MySQL non deve cercare le colonne nella tabella prima dell'esecuzione della query.

+4

E se quelle colonne sono indicizzate, non avrà nemmeno bisogno di leggere dal tavolo stesso ... – eggyal

+0

Ok. Nella mia testa sembrava più facile per mysql selezionare tutto, invece di essere specifico (e ottenere mysql per cercare/ordinare quei campi) – mowgli

+2

Dovrà comunque cercare le colonne per verificare che x, y, z siano colonne valide per quella tabella. –

3

Nella maggior parte dei database, * è più lento di specificare i campi.

È anche una buona pratica di programmazione mettere tutte le colonne, anche se sono molte.

+0

Perché è una buona pratica? – mowgli

+3

@mowgli È una buona pratica per un paio di motivi. 1) Identifica meglio quali dati stai effettivamente utilizzando dai risultati della tua query, 2) Poiché '*' recupererà i dati di tutte le colonne, se in futuro qualcuno aggiungerà 200 colonne in più al tuo tavolo, all'improvviso ti devono gestire 200 volte più dati trasferiti che ** influiranno ** sulla ** prestazione, anche se il loro lavoro non ha nulla a che fare con la tua query. Fondamentalmente è il principio di accesso minimo o privilegio minimo (http://en.wikipedia.org/wiki/Principle_of_least_privilege) –

3

SELECT x,y,q FROM table è sempre più veloce di select * dal momento che non sta leggendo tutti i campi, ma parlare SELECT x,y,q,z FROM table e select * avrebbe stesse prestazioni effetto saggio.