MySQL Tydelig Tutorial

MySQL er en åpen kildekode relasjonsdatabase management system (RDBMS). På grunn av den lave kostnaden, er organisasjoner i økende grad bruker det for store databaser. Jo større databasen, vil det mer sannsynlig at en spørring tilbake mange like rader, noe som gjør produksjonen vanskelig å lese, og spørringen langsom. Bruke DISTINCT søkeord i SELECT-setninger kan eliminere disse duplikater i utskriftene.

Hvorfor du får Duplicate resultater

Vanligvis gjør en spørring ikke vise alle kolonnene i tabellen eller tabellene den refererer til. En arbeidsgiver kan, for eksempel, har en tabell som sporer ansattes fravær. Hvis han ønsker å finne ut hvilke ansatte som hadde minst ett fravær i den siste måneden, kan han bruke en spørring som ser omtrent slik ut:

SELECT employees.first_name, employees.last_name
Fra ansatte, fravær
HVOR employees.employee_id = absences.employee_id
OG absences.date> = 'Jun-01-09'

Hvis Bob Smith var fraværende for tre dager i juni, vil spørringsresultatene inneholde tre rader med Bob Smith. Selv om søket ikke vise dato, siden Bob tre fravær var på forskjellige datoer, returnerer dette søket hver av de tre rader.

Hvorfor Duplicate Resultater Er Bad

Dupliserte rader ikke bare gjøre utskriftene vanskelig å lese, de også tregere søket og hog databaseressurser. Med mindre databasen er svært liten, har du sannsynligvis utvikle dine SQL-skript i en utvikling database forekomst som er atskilt fra produksjonsforekomsten. Det er ikke uvanlig for utviklings tilfeller å ha langt mindre data i dem enn produksjonsforekomsten.

Hvis du tillater dupliserte rader i utskriften, du gjør databasen søke hele veien gjennom alle bordene du har sluttet seg sammen i søket. Dette kan gjøre en spørring som kjørte fort nok i dev eksempel treg til en gjennomgang i produksjonen. Hvis produksjonsdatabasen er stor, kan søket kjøre i timevis.

Bruke og optimalisering DISTINCT

Følgende velg returnerer en rad for Bob Smith:

SELECT DISTINCT employees.first_name, employees.last_name
Fra ansatte, fravær
HVOR employees.employee_id = absences.employee_id
OG absences.date MELLOM '2009-06-01' og '2009-07-01'

Dine resultater er lettere å lese, men databaseserveren har fortsatt å jobbe for hardt hvis arbeidstaker bordet har mye flere rader enn ditt fravær tabellen. MySQL vil gå gjennom hver post i din ansatte tabellen for å se om det arbeidstakeren har noen fravær.

I stedet gjør DISTINCT jobben for deg for å gjøre søket mer effektiv:

SELECT DISTINCT employees.first_name, employees.last_name
Fra ansatte, fravær
HVOR absences.employee_id = employees.employee_id
OG absences.date> = 'Jun-01-09'

Dette søket vil ta en post i fravær bordet og slutte å lete den ansatte bordet når den finner den ansatte som går med det fravær. Søket vil bare kjøre så mange søk som det er fravær, og vil søke gjennom langt mindre av den ansatte tabellen på hvert søk. Den bruker færre ressurser database og kjører mye raskere.