Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "OR" im SelectStatement (https://www.delphipraxis.net/173258-im-selectstatement.html)

vit4l 14. Feb 2013 12:56

Datenbank: MS SQL • Version: 2008 • Zugriff über: ADO

"OR" im SelectStatement
 
Hallo zusammen.
Ich habe einen Select mit Join und dort mehrer "OR" Abfragen. Meine Frage ist, ob die Performance (Geschwindigkeit) der Abfrage an dem "OR" leidet. Meine gehört zu haben mit "AND" ist es kein Problem, aber "OR" verlangsamt das Ganze sehr, weil dadurch eben mehrere Vergleiche ausgeführt werden müssen. Liege ich richtig und wenn was gibt es für Möglichkeit das zu umgehen?

Sir Rufo 14. Feb 2013 13:11

AW: "OR" im SelectStatement
 
Kein
Delphi-Quellcode:
OR
verwenden?

Wenn ich mit dem Auto von Hamburg nach München fahre, dann belastet das die Umwelt. Mit dem Fahrrad wird die Umwelt nicht belastet.

Wenn ich heute noch in München ankommen will, dann ist das Fahrrad aber so was von raus ;)

mkinzler 14. Feb 2013 13:17

AW: "OR" im SelectStatement
 
In der Joinbedingung oder im where?
Alternative Bedingungen oder alternative Werte? Im 2. Fall könnte man es mit IN versuchen.

p80286 14. Feb 2013 13:26

AW: "OR" im SelectStatement
 
Bei einer eingeschränkten Menge von werten könnte man ja auch
Code:
...
and not(Bedingung1)
and not(Bedingung2)
and not(Bedingung3)
...
Verwenden.

Das
Code:
in(...)
hat manchmal Performanceprobleme (meine Erfahrung), ist aber eigentlich vorzuziehen.

Gruß
K-H

jobo 14. Feb 2013 14:01

AW: "OR" im SelectStatement
 
Was machen denn die "or"?
Bilden sie maßgeblich die Ergebnismenge z.B: 80% aus 10Mio records? Oder gibt es separate Kriterien, die für eine starke Einschränkung sorgen?
Der erste Fall wäre unangenehm, der 2. kann vernachlässigt werden.
Gibt es harte Kriterien, die über indizierte Spalten eine Menge von z.B. 1000 records liefert, spielen danach ein paar "or" keine Rolle. Manchmal muss man der DB für solch ein Vorgehen etwas Hilfestellung geben.

Furtbichler 14. Feb 2013 17:25

AW: "OR" im SelectStatement
 
Ein 'OR' kann auch ein Indiz für optimierungsbedürftiges Design sein.

Zitat:

Zitat von Sir Rufo (Beitrag 1203498)
Wenn ich mit dem Auto von Hamburg nach München fahre, dann belastet das die Umwelt. Mit dem Fahrrad wird die Umwelt nicht belastet.
Wenn ich heute noch in München ankommen will, dann ist das Fahrrad aber so was von raus ;)

Mir fehlt der Bezug zum 'OR'.

p80286 14. Feb 2013 17:59

AW: "OR" im SelectStatement
 
Code:
where name='Schmitz'
  and (wohnort='Köln' or wohnort='Düsseldorf')
das halte ich für ein typisches 'OR' wie sollte da das Design geändert werden?

Gruß
K-H

Furtbichler 14. Feb 2013 18:55

AW: "OR" im SelectStatement
 
Das sollte kein Problem sein, sofern Name und Wohnort mit einem Index versehen sind.

Sir Rufo 14. Feb 2013 20:55

AW: "OR" im SelectStatement
 
Zitat:

Zitat von vit4l (Beitrag 1203493)
Meine Frage ist, ob die Performance (Geschwindigkeit) der Abfrage an dem "OR" leidet. Meine gehört zu haben mit "AND" ist es kein Problem, aber "OR" verlangsamt das Ganze sehr, weil dadurch eben mehrere Vergleiche ausgeführt werden müssen.

Zitat:

Zitat von Furtbichler (Beitrag 1203563)
Zitat:

Zitat von Sir Rufo (Beitrag 1203498)
Wenn ich mit dem Auto von Hamburg nach München fahre, dann belastet das die Umwelt. Mit dem Fahrrad wird die Umwelt nicht belastet.
Wenn ich heute noch in München ankommen will, dann ist das Fahrrad aber so was von raus ;)

Mir fehlt der Bezug zum 'OR'.

Da ist der Bezug ;)

jobo 14. Feb 2013 20:59

AW: "OR" im SelectStatement
 
Zitat:

Zitat von Furtbichler (Beitrag 1203563)
Ein 'OR' kann auch ein Indiz für optimierungsbedürftiges Design sein.

AND genauso

Furtbichler 14. Feb 2013 22:10

AW: "OR" im SelectStatement
 
Zitat:

Zitat von jobo (Beitrag 1203609)
Zitat:

Zitat von Furtbichler (Beitrag 1203563)
Ein 'OR' kann auch ein Indiz für optimierungsbedürftiges Design sein.

AND genauso

Blödsinn. Bei weitem nicht 'genauso'.

jobo 15. Feb 2013 08:42

AW: "OR" im SelectStatement
 
Du formulierst in der ursprünglichen Aussage lediglich die Möglichkeit, und diese Aussage kann man genauso für 'AND' formulieren, ebenso wie für Group By oder andere Sprachkonstrukte.
Ich will mich aber gar nicht darüber streiten, ich wollte lediglich andeuten, wie pauschal und beliebig Deine Aussage ist, damit dann auch wenig hilfreich.

Blup 15. Feb 2013 09:12

AW: "OR" im SelectStatement
 
Zitat:

Zitat von p80286 (Beitrag 1203567)
Code:
where name='Schmitz'
  and (wohnort='Köln' or wohnort='Düsseldorf')
das halte ich für ein typisches 'OR' wie sollte da das Design geändert werden?

Gruß
K-H

Im günstigsten Fall gibt es einen gemeinsamen Index für beide Felder in der Reihenfolge name,wohnort,...
Nach meiner Erfahrung ist "in" deutlich problematischer als "or" (Speicherbedarf und Geschwindigkeit).

Elvis 15. Feb 2013 11:21

AW: "OR" im SelectStatement
 
Zitat:

Zitat von Blup (Beitrag 1203648)
Nach meiner Erfahrung ist "in" deutlich problematischer als "or" (Speicherbedarf und Geschwindigkeit).

Hö?
Entweder ist es exakt equivalent zu mehreren or- verknüpften Ausdrücen, oder es ist ein Sub-Select und hat damit nix mit der eigentlichen Frage zu tun.

Zum Thema:
Natürlich kann ein
Delphi-Quellcode:
or
in der reinen Theorie zu langsameren Abfragen führen weil, theoretisch, mehrere Ausdrücke evaluiert werden müssen.
Aber in der Praxis, ohne ganz spezielle Rahmenbedingungen, ist das doch ausgemachter Unsinn. Wenn du nunmal Datensätze haben willst, die dieses oder jenes enthalten, dann musst du das deinem DBMS auch so mitteilen.
Das Mittel hierfür ist nunmal
Delphi-Quellcode:
or
oder
Delphi-Quellcode:
in

mkinzler 15. Feb 2013 11:25

AW: "OR" im SelectStatement
 
Der einzige Unterschied zwischen and und or ist nur, dass and tendenziell die Ergebnismenge verkleinert und or vergrößert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz