MySQL Tutorial Distinto

March 1

MySQL è un sistema di gestione di database relazionale open source (RDBMS). A causa del suo basso costo, le aziende sono sempre più utilizzando per grandi basi di dati. Più grande è la banca dati, più è probabile una query restituirà molte righe duplicate, rendendo l'uscita difficile da leggere e la query lenta. Utilizzando la parola chiave DISTINCT nelle istruzioni SELECT può eliminare questi duplicati nella vostra uscita.

Perché si ottiene risultati duplicati

Di solito, una query non visualizza tutte le colonne nella tabella o le tabelle a cui fa riferimento. Un datore di lavoro può, ad esempio, avere una tabella che tiene traccia assenze dei dipendenti. Se vuole scoprire quale i dipendenti hanno avuto almeno una assenza nell'ultimo mese, potrebbe utilizzare una query che sembra qualcosa di simile:

SELEZIONE employees.first_name, employees.last_name
Da parte dei dipendenti, le assenze
DOVE employees.employee_id = absences.employee_id
E absences.date> = 'JUN-01-09'
ANDARE

Se Bob Smith era assente per tre giorni nel mese di giugno, i risultati della query conterrà tre file di Bob Smith. Anche se la query non visualizza la data, dal momento che di Bob tre assenze erano in date diverse, questa query restituisce ciascuna delle tre righe.

Perché i risultati duplicati sono Bad

righe duplicate non solo rendono l'output difficile da leggere, ma anche rallentare la query e maiale risorse del database. A meno che il database è molto piccolo, probabilmente sviluppare le tue script SQL in una istanza del database di sviluppo che è separata dalla propria istanza di produzione. Non è affatto raro per le istanze di sviluppo di avere molto meno i dati in loro che l'istanza di produzione.

Se si consente righe duplicate nella vostra uscita, si sta facendo ricerca il database tutto il percorso attraverso tutte le tabelle che avete uniti nella query. Questo può fare una query che correva abbastanza veloce nella propria istanza dev lento a passo d'uomo in produzione. Se il database di produzione è di grandi dimensioni, la query può funzionare per ore.

L'utilizzo e ottimizzazione DISTINCT

Il seguente selezionare restituisce una riga per Bob Smith:

SELEZIONARE employees.first_name DISTINCT, employees.last_name
Da parte dei dipendenti, le assenze
DOVE employees.employee_id = absences.employee_id
E absences.date TRA '2009-06-01' E '2009-07-01'
ANDARE

I risultati sono più facili da leggere, ma il server di database deve ancora lavorare troppo se la tabella dipendente ha molto più righe che il vostro tavolo assenze. MySQL passerà attraverso tutti i record nella tabella dipendenti per vedere se il dipendente ha qualche assenze.

Invece, rendere il lavoro distinti per voi per rendere la query più efficiente:

SELEZIONARE employees.first_name DISTINCT, employees.last_name
Da parte dei dipendenti, le assenze
DOVE absences.employee_id = employees.employee_id
E absences.date> = 'JUN-01-09'
ANDARE

Questa query avrà un record nella tabella di assenze e smettere di cercare la tabella dipendente una volta che trova il dipendente che va con quell'assenza. La query verrà eseguito solo le ricerche che ci sono assenze, e la ricerca in molto meno del tavolo dipendente su ogni ricerca. Esso utilizza meno risorse di database e corre molto più veloce.