MySQL er en open source relationel database management system ( RDBMS ) . På grund af sin lave omkostninger , er organisationer i stigende grad bruger det til store databaser . Jo større databasen , jo mere sandsynligt er en forespørgsel returnere mange dubletter , hvilket gør produktionen svært at læse og forespørgslen langsom. Brug af DISTINCT søgeord i din SELECT-sætninger kan eliminere disse dubletter i dit output. Hvorfor får du Duplicate Resultater
Normalt betyder en forespørgsel ikke vise alle kolonner i den eller de tabeller den refererer . En arbejdsgiver kan for eksempel have en tabel , der sporer medarbejdernes fravær. Hvis han ønsker at finde ud af, hvilke medarbejdere havde mindst ét fravær i den sidste måned , kan han bruge en forespørgsel , der ser noget som dette : Hej
SELECT employees.first_name , employees.last_nameFROM medarbejdere, absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' juni -01- 09' ,
p Hvis Bob Smith var fraværende i tre dage i juni vil forespørgslen resultater indeholder tre rækker af Bob Smith. Selvom forespørgslen viser ikke den dato , da Bobs tre fravær var på forskellige datoer, denne forespørgsel returnerer hver af de tre rækker.
Hvorfor Duplicate resultater Bad
< p > Identiske rækker ikke kun gøre din output svært at læse, at de også bremse din forespørgsel og hog database ressourcer. Medmindre din database er meget lille , har du sandsynligvis udvikle dine SQL-scripts i et udviklingsprojekt database instans , der er adskilt fra din produktion instans. Det er slet ikke ualmindeligt for udviklingsprojekter forekomster at have langt mindre data i dem end produktionen instans.
P Hvis du tillader dublerede rækker i dit output , du gør din database søgning hele vejen gennem alle tabeller, du har sluttet sig sammen i din forespørgsel. Dette kan gøre en forespørgsel, der kørte hurtigt nok i din dev instans langsom til en gennemgang i produktionen. Hvis din produktion database er stor, kan din forespørgsel køre i timevis
Brug og Optimering DISTINCT
Følgende udvalgte afkast én række for Bob Smith : . < br >
SELECT DISTINCT employees.first_name , employees.last_nameFROM medarbejdere absencesWHERE employees.employee_id = absences.employee_idAND absences.date MELLEM '2009 -06- 01 ' AND '2009 -07- 01' ;
dine resultater er lettere at læse , men din database server stadig at arbejde for hårdt , hvis din medarbejder tabel har en masse flere rækker end din fravær bordet. . MySQL vil gå igennem hver post i dine medarbejdere tabellen for at se , om den pågældende medarbejder har nogen fravær
stedet gør DISTINCT arbejde for dig at gøre din forespørgsel mere effektiv : Hej
SELECT DISTINCT employees.first_name , employees.last_nameFROM medarbejdere absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' juni -01- 09' ,
Denne forespørgsel vil tage en post i fravær bordet og stoppe søgningen medarbejderen bordet når den finder den medarbejder, der går med det fravær. Din forespørgsel vil kun køre så mange søgninger som der er fravær , og vil søge gennem langt mindre af medarbejderen tabellen på hver søgning . Det bruger færre database ressourcer og kører meget hurtigere.