實體化視圖不僅可以作為遠程複製查詢的功用,而且能夠提高複雜的統計查詢的效能.
1.建立查詢語句對應的實體化視圖.
SQL> conn sh/sh;
SQL> create materialized view mv_sales
2 refresh complete
3 start with sysdate next sysdate+1
4 as select PROD_ID,Count(PROD_ID) from sales group by PROD_ID;
2.該視圖是Enabled Query Rewrite,如果不是,
運行下面的命令
Alter Materialized View mv_sales enable query rewrite;
3.參數query_rewrite_enabled 值是true. 你可以在參數裡設定,或者會話級設定
Alter session set query_rewrite_enabled = true;
4.第四個也是最容易被忽略的,那就是optimizer_mode,不能是rule或者choose(在Oracle9i裡這個值預設是choose)
Alter session set optimizer_mode = true;
如果你還是發現你的查詢很慢,你可以進行以下診斷:
declare
varQUERY VARCHAR2(200);
varMV VARCHAR2(50);
varSTATEMENT_ID VARCHAR2(10);
begin
varQUERY:= 'select PROD_ID,Count(PROD_ID) from sales group by PROD_ID'; --查詢語句
varMV:= 'MV_SALES'; --相應的實體化視圖名稱
varSTATEMENT_ID:= 'hello'; --語句ID
DBMS_MVIEW.EXPLAIN_REWRITE(QUERY=>varQUERY,MV=>varMV,STATEMENT_ID=>varSTATEMENT_ID);
end;
如果執行上面的命令報告以下錯誤:ORA-30380 REWRITE_TABLE does not exist.
則先 Create it using the ORACLE_HOME\rdbms\admin\utlxrw.sql script after connecting to the desired schema.
然後查詢 原因:select * from rewrite_table;