Mit der Abfrage überschreiben kann Oracle eine Abfrage für die Basistabelle (in diesem Fall TEST_DATE) neu schreiben, um die materialisierte Ansicht (in diesem Fall TEST_SYS) transparent zu verwenden. Dies ist sehr nützlich, wenn Ihre materialisierte Ansicht beispielsweise Daten vor der Aggregation darstellt. Wenn ich eine Transaktion Tabelle und eine materialisierte Ansicht hat
CREATE MATERIALIZED VIEW mv_transaction_daily
REFRESH FORCE ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT store_id,
transaction_day,
SUM(transaction_amount) total_transaction_amount
FROM transactions
GROUP BY store_id, transaction_day
dann eine Abfrage wie
SELECT store_id,
transaction_day,
SUM(transaction_amount) total_transaction_amount
FROM transactions
GROUP BY store_id, transaction_day
zu verwenden, um die materialisierte Ansicht anstatt Schlagen die Basistabelle umwandeln Oracle könnte. Und wenn Sie entsprechende Dimension Objekte erstellt haben, können Sie eine Abfrage wie
haben
SELECT store_id,
trunc(transaction_day,'MM'),
SUM(transaction_amount) monthly_transaction_amount
FROM transactions
GROUP BY store_id, trunc(transaction_day,'MM')
, die auch neu geschrieben werden, um die materialisierte Ansicht anstatt der Basistabelle zu verwenden.
Wenn das Umschreiben von Abfragen nicht aktiviert ist, würden Sie nur dann einen Leistungsvorteil durch die Verwendung der materialisierten Ansicht erhalten, wenn Sie die materialisierte Ansicht explizit abgefragt und nicht die Basistabelle abgefragt haben. Dies erfordert in der Regel mehr Entwicklungsaufwand und schränkt die Möglichkeiten der Datenbankadministratoren ein, die Anwendung in der Zukunft durch Feinabstimmung materialisierter Ansichten zu optimieren.
In Ihrem Fall verhindert das Vorhandensein von SYSDATE in Ihrer WHERE-Klausel das Umschreiben von Abfragen, da Oracle nicht in der Lage wäre herauszufinden, dass eine Abfrage gegen TEST_DATE tatsächlich die materialisierte Ansicht verwenden könnte. Oracle weiß, dass Daten in der materialisierten Ansicht, die die Bedingung erfüllten, wenn die materialisierte Ansicht aktualisiert wurde, die Bedingung nicht mehr erfüllten und dass Daten, die sie nicht in die materialisierte Ansicht brachten, die Bedingung erfüllten, nur weil das SYSDATE geändert wurde.