Abfrage auf Ansicht langsamer ausgeführt wird als die direkte Abfrage in Oracle

Ich habe versucht, erstellen, anzeigen mit Parametern, um die Daten dynamisch.

(Ich nicht verwenden, WO Zustand, wie die select-Anweisung selbst ändert sich basierend auf den Parametern)

Dazu schrieb ich ein Verfahren, das gibt mir die notwendigen Daten als oracle-Objekttyp.

FUNCTION get_data(p_pk_id  NUMBER, p_tab_type VARCHAR2)
RETURN M_TYPE_DATA_TAB
AS
v_table_collection M_TYPE_DATA_TAB;
BEGIN

-- my sql query which will change based on the params

RETURN v_table_collection;
END;

und ich führe die select-Abfrage wie folgt.

SELECT * FROM TABLE(get_data(12345, 'MYTAB'));

gibt mir die Daten in weniger als 1 sec.

für die gleiche select-Anweisung habe ich eine Ansicht als

CREATE OR REPLACE VIEW my_view
AS SELECT * FROM TABLE(get_data(12345, 'MYTAB'));

wenn ich die Abfrage der view

SELECT * FROM my_view

dauert es mehr als 6 sec auf die selben Daten bekommen.

Jede Idee, warum es ist, dass sehr großen Unterschied zum Abfragen der gleichen Daten.

Wird die veiw mehr Zeit in Anspruch als eine normale Abfrage?

  • Einen vollständig reproduzierbaren Testfall würde enorm helfen hier. Im Allgemeinen nur das hinzufügen einer select * from auf top spielt sowas von keine Rolle. Wir müssen genau wissen, was es ist, macht Ihren Fall besonders.
  • als Guntram Blohm sagte, wenn ich die Abfrage aus der Ansicht, die er leistet full table scan, wo die direkte Abfrage über alle Indizes der Basis-Tabelle, um die Daten schneller.
  • Das ist hilfreich, aber wir sind noch nicht dazu gekommen, um die Wurzel des Problems. Ich würde gerne wissen, warum es verwendet eine FTS, die statt eines Indexes.
Schreibe einen Kommentar