Wieso ist distinct unsauberer als group by



  • Hi,

    nochmal eine Frage an die Profis:
    Soweit ich gehört habe, soll select distinct eine unsaubere Lösung sein. Es wird empfohlen stattdessen group by zu verwenden. Hat jemand von Euch eine Ahnung, warum das so ist, ist select distinct veraltet oder wird das nicht von allen sql-Dialekten unterstützt?

    Gruß Mümmel



  • distinct gruppiert nichts, sondern sucht nur eindeutige Werte. Du kannst für distinct z.B. keine Aggregat Funktionen ausführen (sum, avg, count usw), dafür ist es aber in der Regel schneller als group by um eindeutige Werte zu ermitteln.



  • Hi Cpp_Junky,

    Du meinst also, für das Ermitteln eindeutiger Werte weiterhin distinct einsetzen?

    Gruß Mümmel



  • Ich sehe da kein Problem. Auf einigen Datenbanken ist dies sogar schneller als group by.



  • DISTINCT wird deswegen oft als "unsauber" bezeichnet, weil einige Leute (die nicht viel davon verstehen was sie tun, und sich auch nicht darum scheren) DISTINCT als "Wunderheilmittel" für Duplikate verwenden.
    Beispielsweise wenn irgendein JOIN blöderweise Duplikate produziert -> einfach DISTICT dazugeschrieben und passt schon. Das ist natürlich der Horror schlechthin, weil das Problem meist ein falsch angegebener JOIN ist, und nicht ein fehlendes DISTINCT. Der Effekt ist dann oft dass die Abfrage 1) langsamer läuft als sie müsste (weil erst ein zu grosses Ergebnis ermittelt wird, das danach dann mittels DISTINCT wieder zusammengekürzt wird), und 2) dass auch mal Blödsinn dabei rauskommen kann.

    Das heisst aber nicht dass DISTINCT grundsätzlich böse ist.
    Und schon garnicht dass man es überall durch GROUP BY ersetzen sollte.



  • Hi,

    Danke Cpp_Junky und hustbaer. Nun ist mir das schon ein bisschen klarer.
    Also doch nicht generell distinct durch group by ersetzen.

    Gruß Mümmel


Anmelden zum Antworten