Registriert seit: 27. Nov 2017
2.490 Beiträge
Delphi 7 Professional
|
AW: Firebird 3.0 Order mit Feldname bei Union
13. Aug 2021, 09:03
Wäre denn da dann nicht eher ein "Union All" sinnvoller?
Union sortiert und entfernt Duplikate.
Union All hängt die Ergebnisse einfach aneinander und ist dadurch auch schneller.
Und wenn ich eine Tabelle mit unterschiedlichen Whereklauseln habe, sollte es keine Duplikate geben, wenn doch, hab' ich eher ein Logikproblem in den Wherebedingungen, als die Erfordernis, diese Duplikate per Union zu entfernen.
Die Verwendung von Union ist bei mir eben ebenso fraglich, wie ein Distinct in einem unvollständig ausformulierten Join, der dadurch zu Dubletten führt.
Und ja: Für beide Konstrukte, Union und Distinct, gibt es zuweilen Ausnahmesituationen, in denen deren Verwendung sinnvoll sein kann. Aber bitte immer erst dann, wenn es anders nicht geht. Erfahrungsgemäß ist "es geht auch ohne" auch performanter, da die Datenbank nicht erst mehr oder weniger große Datenmengen zusammensuchen und die dann anschließend auf Eindeutigkeit trimmen muss.
Bei kleinen Datenmengen mag das nicht unbedingt ins Gewicht fallen, bei etlichen dutzend Millionen Datensätzen freut sich der Temptablespace dann aber schon über eine geringere Belastung, derweil, dort fängt es dann an, deutlich in Richtung "suboptimale" Performanz zu gehen.
|