Für einfache Dinge ist es besser, die Funktion translate
unter der Prämisse zu verwenden, dass sie weniger CPU-intensiv ist oder regexp_replace
der Weg ist?
Diese Frage kommt von Wie kann ich Klammern zu Bindestrichen innerhalb der Oracle REGEXP_REPLACE-Funktion ersetzen?
Ich denke, Sie stoßen auf einfache Optimierung. Der Regexp-Ausdruck ist so teuer zu berechnen, dass das Ergebnis zwischengespeichert wird in der Hoffnung, dass es in Zukunft wieder verwendet wird. Wenn Sie tatsächlich unterschiedliche Zeichenfolgen zum Konvertieren verwenden, werden Sie sehen, dass die einfache Übersetzung natürlich schneller ist, weil es ihre spezialisierte Funktion ist.
Hier ist mein Beispiel, das auf 11.1.0.7.0
:
in 11.2.0.3.0
:
Fazit: Im Allgemeinen vermute ich, dass translate
gewinnt.
Für SQL habe ich das mit dem folgenden Skript getestet:
%Vor% und festgestellt, dass die Leistung von translate
und regexp_replace
fast immer gleich war, aber es könnte sein, dass die Kosten der anderen Operationen die Kosten der Funktionen, die ich testen möchte, überfordern.
Als nächstes habe ich eine PL / SQL-Version ausprobiert:
%Vor% Hier dauert die translate
Version knapp 10 Sekunden, während die regexp_replace
Version etwa 0,2 Sekunden dauert - etwa 2 Größenordnungen schneller (!)
Aufgrund dieses Ergebnisses werde ich in meinem performance-kritischen Code sehr viel häufiger reguläre Ausdrücke verwenden - sowohl SQL als auch PL / SQL.
Tags und Links sql oracle regex performance plsql