AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi distinct vs order by
Thema durchsuchen
Ansicht
Themen-Optionen

distinct vs order by

Ein Thema von ibp · begonnen am 1. Nov 2006 · letzter Beitrag vom 1. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

distinct vs order by

  Alt 1. Nov 2006, 12:15
Datenbank: ib • Version: 6.5 • Zugriff über: bde
hallo,

hab da mal ne frage...

SQL-Code:
select distinct tabelle.feld
from tabelle
order by tabelle.feld
liefert mir das gleiche ergebnis wie....

SQL-Code:
select tabelle.feld
from tabelle
group by tabelle.feld
order by tabelle.feld
gibt es pros und contras?

danke schon mal!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: distinct vs order by

  Alt 1. Nov 2006, 12:19
Nimm mal 2 Felder in die Feldliste, dann siehst du den Unterschied.
Das distinct blendet doppelte Werte(-mengen) aus, das Group By fasst diese zusammen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: distinct vs order by

  Alt 1. Nov 2006, 12:32
annahme ich brauche nur ein feld?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: distinct vs order by

  Alt 1. Nov 2006, 12:34
Dann würde ich trotzdem das erstere nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: distinct vs order by

  Alt 1. Nov 2006, 12:38
Hallo,

Im Zweifelfall sagt der der ibplanalyzer,
was schneller ist.
Aber bei vielen Dubletten ist das auf jeden Fall das distinct.

Ein order by kann schnell zum Auslagern auf die Platte führen.

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

Re: distinct vs order by

  Alt 1. Nov 2006, 12:40
Zitat von hoika:
Ein order by kann schnell zum Auslagern auf die Platte führen.
das ist doch mal ne aussage!

btw...
SQL-Code:
select distinct tabelle.feld1, tabelle.feld2
from tabelle
order by tabelle.feld1, tabelle.feld2
liefert mir das gleiche ergebnis wie...
SQL-Code:
select tabelle.feld1, tabelle.feld2
from tabelle
group by tabelle.feld1, tabelle.feld2
order by tabelle.feld1, tabelle.feld2
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: distinct vs order by

  Alt 1. Nov 2006, 12:47
Hallo,

was mkinzler wohl meinte ist

select distinct field1, field 2 gegen

SQL-Code:
select field1, field 2
order by field1
group by field1
also ein "normales" zweites field im select

Noch zum distinct
Ab 6.5 (?) ist der Index-Code auch noch komplett überarbeitet wurden,
um mit bei vielen Dubletten besser / schneller zu sein.


Heiko
Heiko
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: distinct vs order by

  Alt 1. Nov 2006, 15:27
Eine Gruppierung sollte von sich aus zu einer Sortierung führen. "Distinct" ist, praktisch gesehen, wie eine Gruppierung ohne Aggregatfunktionen.
Order By hat die gleichen Auswirkungen, die Distinct oder eine normale Gruppierung haben: Erst wird selektiert, danach werden die Werte gruppiert. Es muss also in fast[1] jedem Fall die Ergebnismenge zwischengespeichert werden, bevor sie zum Client geht.
Wie man jetzt auf die Idee kommt, dass eine Sortierung schlimmere Auswirkungen haben kann verstehe ich jetzt nicht wirklich...

[1] werden nur indizierte Felder benutzt sollte weder eine Sortierung noch eine Gruppierung "Nacharbeiten" erfordern. Schlicht und ergreifend weil Indizes nunmal sortiert sind.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: distinct vs order by

  Alt 1. Nov 2006, 15:45
Hallo,

das Sortieren kann entweder direkt durch richtiges Durchlaufen eines
Index erfolgen, oder durch Erstellen des Recordsets auf der Platte
und Sortieren dieses Recordsets.
Der 2. Fall ist langsamer.

Ich habe das bei einem Kunden selbst erlebt.
eine Query über 8 Tabellen mit einem Order By
hat eine temporäre Tabelle von ein paar MB erzeugt.
Das Recordset sind 13000 Einträge mit ner Menge Felder.

Diese Query wurde auf mehreren Rechnern quasi gleichzeitig
aufgerufen. In der Zwischenzeit war mit einem anderen Programm,
welches auf die gleiche DB zugegriffen hat, praktisch nicht zu arbeiten.

Nachdem ich das order by rausgenommen habe und die Liste
lokal mit Quicksort sortieren, ist der Engpass weg.


Heiko
PS:
Für das gleichzeitig konnte ich nichts,
das wollte der Kunde so.
Heiko
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#10

Re: distinct vs order by

  Alt 1. Nov 2006, 16:54
Zitat von hoika:
Hallo,

das Sortieren kann entweder direkt durch richtiges Durchlaufen eines
Index erfolgen, oder durch Erstellen des Recordsets auf der Platte
und Sortieren dieses Recordsets.
Der 2. Fall ist langsamer.

Ich habe das bei einem Kunden selbst erlebt.
eine Query über 8 Tabellen mit einem Order By
hat eine temporäre Tabelle von ein paar MB erzeugt.
Das Recordset sind 13000 Einträge mit ner Menge Felder.

Diese Query wurde auf mehreren Rechnern quasi gleichzeitig
aufgerufen. In der Zwischenzeit war mit einem anderen Programm,
welches auf die gleiche DB zugegriffen hat, praktisch nicht zu arbeiten.

Nachdem ich das order by rausgenommen habe und die Liste
lokal mit Quicksort sortieren, ist der Engpass weg.
Ah, dann habe ich dich falsch verstanden!
Man konnte in deinem vorherigen Beitrag herauslesen, dass dieser Performance hit bei Sortierungen aber nicht bei Gruppierungen/Distinct eintritt. Genau deshalb habe ich nachgehakt. Schließlich würde jegliches postprocessing zu genau dem Effekt führen (temp tabelle), egal ob Sortierung, Gruppierung oder Distinct.

Ich bin übrigens auch der Meinung, dass man (wenn möglich) lokal sortieren sollte.
Selbst DBMS'se, die normalerweise excellent darin sind Querypläne zu erarbeiten, generieren bei einer Sortierung den worst case (Indizierte Felder mal ausgenommen).

edit: Mainung -> Meinung; auf was für'n Trip war ich denn da?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz