In einer gespeicherten Prozedur (die ein Datum Parameter namens ‚paramDate‘ hat) Ich habe eine Abfrage wie dieseOracle Performance unter Verwendung von Funktionen in where-Klausel
select id, name
from customer
where period_aded = to_char(paramDate,'mm/yyyy')
wird Oracle paramDate für jede Zeile in einem String konvertieren?
Ich war sicher, dass Oracle würde nicht, aber mir wurde gesagt, dass Oracle wird. In der Tat dachte ich, dass, wenn der Parameter der Funktion Constraint war (nicht innerhalb der Abfrage ein fierld noch ein berechneter Wert) das Ergebnis immer gleich sein sollte, und deshalb Oracle diese Konvertierung nur einmal durchführen sollte. Dann erkannte ich, dass ich manchmal DML-Sätze in mehreren Funktionen ausgeführt habe, und vielleicht könnte dies dazu führen, dass sich der resultierende Wert ändert, auch wenn er sich nicht für jede Zeile ändert.
Dies sollte bedeuten, dass ich solche Werte konvertieren sollte, bevor ich sie der Abfrage hinzufügen.
Wie auch immer, vielleicht gut 'bekannte Funktionen' (eingebaut) werden einmal ausgewertet, oder sogar meine Funktionen wären auch.
Auf jeden Fall wieder ...
Wird Orakel, dass to_char einmal ausführen oder wird Oracle tut es für jede Zeile?
Vielen Dank für Ihre Antworten
Profilieren Sie die Abfrage und sehen Sie. –