Wenn ich eine Abfrage mit SQL Developer ausführen und Bind-Variablen wie :type
verwenden, werden aufgefordert, Werte zu verwenden, und dann die Abfragen schneller ausgeführt, als wenn ich die Bindung Variablen durch behoben Literalwert, sagen Sie 'A'
.Abfragen läuft langsam ohne Parameter in SQL Developer
Zum Beispiel die erste Abfrage, die als die zweite Abfrage schneller läuft:
erste Abfrage (läuft 0,5 Sekunden)
select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = :lv_dmdunit and type = :lv_type and loc = :lv_loc
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC
zweite Abfrage (läuft 1,7 Sekunden)
select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = 'PROD_1' and type = 'A' and loc = 'B101'
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC
Warum Läuft die erste Abfrage schneller als die zweite Abfrage? Welche Schritte kann ich ausführen, um die zweite Abfrage so schnell wie die erste auszuführen?
Dies ist eine kleine Abfrage und 1 Sekunde macht keinen großen Unterschied, aber ich habe auch große Abfragen, wo der Unterschied zwischen den gleichen Abfragen (Params und Non-Params) 10 bis 15 Minuten sind.
Was die Ausführungspläne für beide Abfragen zeigen? Welche Version der Oracle-Datenbank verwenden Sie? (Außerdem können Sie in SQL Developer Bindungswerte als Teil eines Skripts festlegen, indem Sie den Befehl 'variable' und einen anonymen Block verwenden, wenn Sie sie bei Aufforderung nicht weiter eingeben möchten) –
Wahrscheinlich mit" Parameter Sniffing "zu tun "- Suche nach mehr. – Hogan