2010-11-30 16 views
3
CREATE TABLE TEST_DATE(COL1 VARCHAR2(20),COL2 NUMBER,COL3_DATE DATE,COL4_DATE DATE) 
/ 

create materialized view TEST_SYS 
REFRESH FORCE ON DEMAND 
ENABLE QUERY REWRITE --- ???? 
AS 
SELECT COL1,COL2 
FROM TEST_date 
WHERE TRUNC(SYSDATE) BETWEEN TRUNC(COL3_DATE) AND TRUNC(COL4_DATE) 
/

Wenn aktivieren Abfrage Rewrite Option deaktiviert ist, wird MVIEW für die obige Abfrage erstellt immer dann, was der Zweck ENABLE QUERY REWRITE-Klausel, die während der Erstellung materialisierte Ansicht, können wir sie entfernen und erstellen, und müssen wir Kompromisse bei der Leistung des MView machen, wenn wir einen Kommentar zum Rewrite aktivieren müssen.MVIEW „ermöglicht das Umschreiben von Abfragen“ usage

Bitte erklären Sie mir die Verwendung der Option enable query rewrite im Detail.

Antwort

7

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.

0

Sie müssen die Abfrage-Umschreibung nicht aktiviert haben. Außerdem würde es Sie angesichts Ihrer Mview-Definition wahrscheinlich nicht hepen.