![]() |
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? |
AW: "OR" im SelectStatement
Kein
Delphi-Quellcode:
verwenden?
OR
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 ;) |
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. |
AW: "OR" im SelectStatement
Bei einer eingeschränkten Menge von werten könnte man ja auch
Code:
Verwenden.
...
and not(Bedingung1) and not(Bedingung2) and not(Bedingung3) ... Das
Code:
hat manchmal Performanceprobleme (meine Erfahrung), ist aber eigentlich vorzuziehen.
in(...)
Gruß K-H |
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. |
AW: "OR" im SelectStatement
Ein 'OR' kann auch ein Indiz für optimierungsbedürftiges Design sein.
Zitat:
|
AW: "OR" im SelectStatement
Code:
das halte ich für ein typisches 'OR' wie sollte da das Design geändert werden?
where name='Schmitz'
and (wohnort='Köln' or wohnort='Düsseldorf') Gruß K-H |
AW: "OR" im SelectStatement
Das sollte kein Problem sein, sofern Name und Wohnort mit einem Index versehen sind.
|
AW: "OR" im SelectStatement
Zitat:
Zitat:
|
AW: "OR" im SelectStatement
Zitat:
|
AW: "OR" im SelectStatement
Zitat:
|
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. |
AW: "OR" im SelectStatement
Zitat:
Nach meiner Erfahrung ist "in" deutlich problematischer als "or" (Speicherbedarf und Geschwindigkeit). |
AW: "OR" im SelectStatement
Zitat:
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:
in der reinen Theorie zu langsameren Abfragen führen weil, theoretisch, mehrere Ausdrücke evaluiert werden müssen.
or
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:
oder
or
Delphi-Quellcode:
in
|
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