solito, una query non visualizza tutte le colonne della tabella o le tabelle cui fa riferimento. Un datore di lavoro può, ad esempio , avere una tabella che tiene traccia delle assenze dei dipendenti . Se vuole sapere quali dipendenti hanno avuto almeno un assenza nel corso dell'ultimo mese , potrebbe utilizzare una query che sembra qualcosa di simile :
Seleziona employees.first_name , dipendenti employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' JUN- 01-09 ';
Se Bob Smith era assente per tre giorni nel mese di giugno, i risultati della query saranno contengono tre file di Bob Smith . Anche se la query non visualizza la data , dal momento che tre assenze di Bob erano in date diverse, questa query restituisce ciascuno dei tre file .
Perché duplicati i risultati sono cattivi
righe duplicate non solo rendere la vostra uscita difficile da leggere , ma anche rallentare la query e le risorse del database maiale . A meno che il database è molto piccolo , probabilmente sviluppare i vostri 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 meno dati in loro che l'istanza di produzione .
Se permettete righe duplicate nella vostra uscita , si sta facendo la ricerca di database tutto il percorso attraverso tutte le tavoli ti sei unito insieme 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
utilizzo e ottimizzazione di DISTINCT
I seguenti SELECT restituisce una riga per Bob Smith : .
SELEZIONA employees.first_name DISTINCT , dipendenti employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date TRA '2009- 06-01 'AND '2009 -07- 01' ;
I risultati sono più facili da leggere , ma il server di database deve ancora lavorare troppo se il vostro tavolo dipendente ha molte più righe di quante il tuo tavolo assenze . . MySQL passerà attraverso tutti i record della tabella dipendenti per vedere se il dipendente ha delle assenze
Invece , rendere il lavoro distinti per voi per rendere la query più efficiente :
Seleziona employees.first_name DISTINCT , dipendenti employees.last_nameFROM , absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' JUN- 01-09 ';
Questa query avrà un record nella tabella di assenze e di smettere di cercare la tabella dipendente una volta che trova il dipendente che va con quella assenza. La query verrà eseguito solo come molte ricerche quante sono le assenze , e cercherà attraverso molto meno della tabella dipendente in ogni ricerca. Esso utilizza meno risorse di database e corre molto più veloce .
Programmazione © www.354353.com