3 Stimmen

Oracle Leistung IN oder OR

Welcher Operator in Orakel ist leistungsfähiger: IN oder OR

ex:

select * from table where y in (1,2,3)

ou

select * from table where y = 1 or y = 2 or y = 3

9voto

Eric Petroelje Punkte 58501

Um sicher zu gehen, sollten Sie einen Erklärungsplan erstellen, aber ich würde erwarten, dass die Leistung identisch ist.

8voto

Vincent Malgrat Punkte 65127

Die beiden Anweisungen sind gleichwertig, der Optimierer wird denselben Zugriffspfad generieren. Daher sollten Sie diejenige wählen, die am lesbarsten ist (ich würde sagen, die erste).

4voto

David Punkte 1295

Ich würde zögern, OR auf diese Weise zu verwenden. Sie müssen vorsichtig sein, wenn Sie zusätzliche Kriterien hinzufügen. Wenn Sie zum Beispiel ein AND hinzufügen, müssen Sie daran denken, Klammern hinzuzufügen.

z. B:

select * from table where y = 1 or y = 2 or y = 3

wird geändert in:

select * from table where ( y = 1 or y = 2 or y = 3 ) AND x = 'value'

Es kann leicht passieren, dass man die Klammern vergisst und einen schwer zu entlarvenden Fehler einbaut. Allein aus Gründen der Wartungsfreundlichkeit würde ich dringend empfehlen, IN anstelle von OR zu verwenden.

1voto

DVK Punkte 123218

Bei einer einfachen Abfrage wie der Ihren ist der Optimierer klug genug, beide zu 100 % gleich zu behandeln, so dass sie identisch sind.

ABER, das ist möglicherweise nicht zu 100 % der Fall.

Bei der Optimierung großer komplexer Gelenke ist es z. B. plausibel, dass der Optimierer die beiden Ansätze nicht so intelligent gleichsetzt und daher den falschen Plan wählt. Ich habe ein ähnliches Problem bei Sybase beobachtet, weiß aber nicht, ob es auch bei Oracle auftritt (daher meine Einschränkung "möglicherweise").

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X