2009-12-11 7 views

Antwort

8

Wenn Sie wissen, dass zwei Spalten von Ihrem Ergebnis sind immer in direktem Zusammenhang dann langsamer ist, dies zu tun:

SELECT DISTINCT CustomerId, CustomerName FROM (...) 

als dies:

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId 

weil im zweiten Fall es muss nur die ID vergleichen, aber im ersten Fall muss es beide Felder vergleichen. Dies ist ein MySQL-spezifischer Trick. Es funktioniert nicht mit anderen Datenbanken.

+2

Diese beiden Abfragen sind nicht gleich, oder? In der zweiten wählen Sie nur eindeutige IDs aus, nicht auch eindeutige Namen. – DisgruntledGoat

+0

Dies funktioniert nicht mit anderen T-SQL, oder es wird nicht schneller mit anderen T-SQL? –

+1

Nun, der zweite funktioniert nicht !!! Jede Spalte, die nicht in der GROUP BY-Klausel enthalten ist, erfordert eine Aggregationsfunktion. –

2
SELECT Code 
FROM YourTable 
GROUP BY Code 

vs

SELECT DISTINCT Code 
FROM YourTable 
+4

Wie ist das eine Antwort auf die q? Fehle ich etwas? – nawfal

0

Die Grundregel: Setzen Sie alle Spalten aus der SELECT-Klausel in die GROUP BY-Klausel

so

SELECT DISTINCT a,b,c FROM D 

SELECT a,b,c FROM D GROUP BY a,b,c 
+1

Korrigieren Sie mich, wenn ich falsch liege. Sollte die Grundregel nicht lauten, alle Nicht-Aggregat-Spalten aus der SELECT-Klausel in die GROUP BY-Klausel einfügen? –

-2

Beispiel wird.

Beziehung Kunde (ssnum, Name, Postleitzahl, Adresse) PK (ssnum). ssnum ist Sozialversicherungsnummer.

SQL:

Select DISTINCT ssnum from customer where zipcode=1234 group by name 

Diese SQL-Anweisung gibt eindeutige Datensätze für diejenigen Kunden, die zipcode haben 1234. Am Ende Ergebnisse nach Namen gruppiert sind.

Hier DISTINCT ist nicht notwendig. weil Sie ssnum auswählen, das bereits eindeutig ist, weil ssnun der Primärschlüssel ist. zwei Personen können nicht die selbe ssnum haben.

In diesem Fall gibt Select ssnum from customer where zipcode=1234 group by name bessere Leistung als "... DISTINCT .......".

DISTINCT ist eine teure Operation in einem DBMS.

+0

Was ist der Unterschied in der Antwort, wenn Sie GROUP BY und keine GROUP BY haben? Was ist der Unterschied in der Antwort, wenn du DISTINCT und keine DISTINCT hast (ist das "undeutlich"?)? AFAICS, die Abfragen würden alle die gleiche Ergebnismenge ergeben (Geben oder Nehmen, die nicht zählt), obwohl nicht notwendigerweise alle mit der gleichen Geschwindigkeit. –

Verwandte Themen