MySQL ist eine Open-Source- relationalen Datenbank -Management-System ( RDBMS) . Aufgrund seiner niedrigen Kosten , sind Organisationen nutzen es zunehmend für große Datenbanken . Je größer die Datenbank , desto wahrscheinlicher wird eine Abfrage zurückgeben viele doppelte Zeilen , so dass Ausgang schwer zu lesen und die Abfrage langsam. Mit dem Schlüsselwort DISTINCT in der SELECT -Anweisungen können diese Duplikate in Ihrer Ausgabe zu beseitigen. Warum Sie doppelte Ergebnisse zu bekommen
Normalerweise führt eine Abfrage nicht angezeigt alle Spalten in der Tabelle oder Tabellen auf die sie verweist . Ein Arbeitgeber kann zum Beispiel eine Tabelle, die Abwesenheiten der Mitarbeiter verfolgt . Wenn er , um herauszufinden, welche Mitarbeiter hatten mindestens eine Abwesenheit im letzten Monat will , könnte er eine Abfrage verwenden , die etwa wie folgt aussieht : SELECT
employees.first_name , employees.last_nameFROM Mitarbeitern absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' JUN -01-09 ';
Wenn Bob Smith fehlte für drei Tage im Juni , die Ergebnisse der Abfrage werden drei Reihen von Bob Smith enthalten . Auch wenn die Abfrage nicht angezeigt wird das Datum , da Bob drei Abwesenheiten waren an verschiedenen Tagen , gibt diese Abfrage jeder der drei Reihen .
Warum Doppelte Ergebnisse Bad
Sind < p> Doppelte Zeilen nicht nur Ihre Leistung schwer zu lesen, aber auch verlangsamen Ihre Anfrage und hog Datenbank-Ressourcen . Sofern Ihre Datenbank ist sehr klein , werden Sie wahrscheinlich entwickeln Sie Ihre SQL-Skripts in einer Entwicklung, Datenbank -Instanz, die getrennt von Ihrer Produktion Instanz ist. Es ist überhaupt nicht ungewöhnlich für die Entwicklung Fällen weit weniger Daten in ihnen als die Produktion Instanz müssen .
Wenn Sie doppelte Zeilen in Ihrer Ausgabe erlauben , du machst deine Datenbank-Suche den ganzen Weg durch all die Tabellen, die Sie haben zusammen in der Abfrage verbunden. Dies kann eine Abfrage, die schnell genug in Ihrem dev Beispiel lief langsam auf ein Schneckentempo in der Produktion. Wenn Ihre Produktion Datenbank groß ist , können Sie Ihre Anfrage für Stunden laufen
Nutzung und Optimierung DISTINCT
Die folgende SELECT Gibt eine Zeile für Bob Smith : .
SELECT DISTINCT employees.first_name , employees.last_nameFROM Mitarbeitern absencesWHERE employees.employee_id = absences.employee_idAND absences.date ZWISCHEN '2009 -06-01 'AND '2009 -07-01 ';
Ihre Ergebnisse sind leichter zu lesen, aber die Datenbank -Server muss noch zu hart arbeiten, wenn Ihr Mitarbeiter Tisch hat viel mehr Zeilen als Ihre Abwesenheiten Tisch. . MySQL wird durch jeden Datensatz in Ihre Mitarbeiter Tisch zu gehen , um zu sehen , wenn diese Mitarbeiter hat keine Fehlzeiten
Stattdessen machen DISTINCT Arbeit für Sie , um Ihre Abfrage effizienter:
SELECT DISTINCT employees.first_name , employees.last_nameFROM Mitarbeitern absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' JUN- 01-09 ';
Diese Abfrage wird ein Datensatz in der Tabelle Abwesenheiten zu nehmen und aufhören zu suchen, die Tabelle der Mitarbeiter sobald es findet die Mitarbeiter , die mit dieser Abwesenheit geht . Ihre Anfrage wird nur so viele Suchanfragen laufen da Abwesenheiten sind , und wird durch weit weniger von der Tabelle employee auf jeder Suche suchen. Es verbraucht weniger Ressourcen und Datenbank läuft viel schneller.