物化檢視的CONSIDER FRESH語句(三)
物化檢視的修改語句ALTER MATERIALIZED VIEW包含了CONSIDER FRESH語句。透過這個語句可以使得資料庫認為物化檢視已經是重新整理後的狀態。同時可以使得這個物化檢視對於查詢重新生效。
這篇簡單討論CONSIDER FRESH語句對查詢重寫的影響。
物化檢視的CONSIDER FRESH語句(一):http://yangtingkun.itpub.net/post/468/501199
物化檢視的CONSIDER FRESH語句(二):http://yangtingkun.itpub.net/post/468/501219
CONSIDER FRESH語句的另一個主要功能就是使得物化檢視可以繼續為查詢重寫所使用。
查詢重新包括三個級別的引數:ENFORCED、TRUSTED和STALE_TOLERATED。對於一個無法重新整理到FRESH狀態的物化檢視,只有STALE_TOLERATED級別的查詢重新可以考慮讀取這個物化檢視,而使用了CONSIDER FRESH語句後,在TRUSTED級別Oracle在查詢重寫的時候也可以使用這個物化檢視:
SQL> DROP TABLE T PURGE;
表已刪除。
SQL> DROP MATERIALIZED VIEW MV_T;
實體化檢視已刪除。
SQL> CREATE TABLE T
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 TYPE VARCHAR2(18),
5 CREATE_DATE DATE);
表已建立。
SQL> INSERT INTO T
2 SELECT ROWNUM,
3 OBJECT_NAME,
4 OBJECT_TYPE,
5 CREATED
6 FROM ALL_OBJECTS;
已建立55680行。
SQL> COMMIT;
提交完成。
SQL> CREATE MATERIALIZED VIEW LOG ON T
2 WITH ROWID, SEQUENCE (TYPE)
3 INCLUDING NEW VALUES;
實體化檢視日誌已建立。
SQL> CREATE MATERIALIZED VIEW MV_T
2 REFRESH FAST
3 ENABLE QUERY REWRITE
4 AS SELECT TYPE, COUNT(*)
5 FROM T
6 GROUP BY TYPE;
實體化檢視已建立。
首先建立了測試的物化檢視,然後檢查一下查詢重寫的配置:
SQL> SHOW PARAMETER QUERY_REWRITE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
query_rewrite_enabled string TRUE
query_rewrite_integrity string enforced
SQL> @?/rdbms/admin/utlxrw
表已建立。
SQL> EXEC DBMS_MVIEW.EXPLAIN_REWRITE('SELECT TYPE, COUNT(*) FROM T GROUP BY TYPE')
PL/SQL 過程已成功完成。
SQL> SELECT MESSAGE
2 FROM REWRITE_TABLE;
MESSAGE
--------------------------------------------------------------------------------------------
QSM-01151: 已重寫查詢
QSM-01209: 已透過實體化檢視 MV_T, 採用文字匹配演算法進行了查詢重寫
SQL> TRUNCATE TABLE REWRITE_TABLE;
表被截斷。
SQL> INSERT INTO T
2 VALUES (1, 'TEST', 'T', SYSDATE);
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> EXEC DBMS_MVIEW.EXPLAIN_REWRITE('SELECT TYPE, COUNT(*) FROM T GROUP BY TYPE')
PL/SQL 過程已成功完成。
SQL> SELECT MESSAGE
2 FROM REWRITE_TABLE;
MESSAGE
------------------------------------------------------------------------------------------
QSM-01150: 未重寫查詢
QSM-01029: 實體化檢視 MV_T 在 ENFORCED 完整性模式中已過時
SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = STALE_TOLERATED;
會話已更改。
SQL> TRUNCATE TABLE REWRITE_TABLE;
表被截斷。
SQL> EXEC DBMS_MVIEW.EXPLAIN_REWRITE('SELECT TYPE, COUNT(*) FROM T GROUP BY TYPE')
PL/SQL 過程已成功完成。
SQL> SELECT MESSAGE
2 FROM REWRITE_TABLE;
MESSAGE
-------------------------------------------------------------------------------------
QSM-01151: 已重寫查詢
QSM-01209: 已透過實體化檢視 MV_T, 採用文字匹配演算法進行了查詢重寫
SQL> TRUNCATE TABLE REWRITE_TABLE;
表被截斷。
SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
會話已更改。
SQL> EXEC DBMS_MVIEW.EXPLAIN_REWRITE('SELECT TYPE, COUNT(*) FROM T GROUP BY TYPE')
PL/SQL 過程已成功完成。
SQL> SELECT MESSAGE
2 FROM REWRITE_TABLE;
MESSAGE
----------------------------------------------------------------------------------------
QSM-01150: 未重寫查詢
QSM-01031: 實體化檢視 MV_T 在 TRUSTED 完整性模式中已過時
可以看到,和前面分析的一樣,一旦物化檢視的資料和基表中的最新的資料存在差異,這個物化檢視在TRUSTED模式下無法被查詢重寫所使用。
下面使用CONSIDER FRESH語句:
SQL> TRUNCATE TABLE REWRITE_TABLE;
表被截斷。
SQL> ALTER MATERIALIZED VIEW MV_T
2 CONSIDER FRESH;
實體化檢視已更改。
SQL> EXEC DBMS_MVIEW.EXPLAIN_REWRITE('SELECT TYPE, COUNT(*) FROM T GROUP BY TYPE')
PL/SQL 過程已成功完成。
SQL> SELECT MESSAGE
2 FROM REWRITE_TABLE;
MESSAGE
---------------------------------------------------------------------------------
QSM-01151: 已重寫查詢
QSM-01209: 已透過實體化檢視 MV_T, 採用文字匹配演算法進行了查詢重寫
透過使用CONSIDER FRESH,資料庫重新認為物化檢視已經和基表的資料保持一致,因此TRUSTED模式下,物化檢視重新可以被查詢重寫機制所使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-666019/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物化檢視的CONSIDER FRESH語句(二)IDE
- 物化檢視的CONSIDER FRESH語句(一)IDE
- Oracle物化檢視語法Oracle
- Oracle11gr2物化檢視日誌新增PURGE語句Oracle
- 【ORACLE】常用物化檢視相關後設資料查詢語句Oracle
- 【物化檢視】根據物化檢視日誌快速重新整理物化檢視的過程
- oracle物化檢視日誌系列(三)Oracle
- Oracle11gr2物化檢視日誌新增COMMIT SCN語句OracleMIT
- 物化檢視妙用__表同步使用物化檢視方法
- 【物化檢視】幾種物化檢視日誌分析
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(三)
- 檢視低效的SQL語句SQL
- oracle物化檢視Oracle
- 普通檢視和物化檢視的區別
- 物化檢視的快速重新整理測試與物化檢視日誌
- 物化檢視詳解
- oracle 建立物化檢視Oracle
- Oracle 物化檢視建立Oracle
- materialized view (物化檢視)ZedView
- 物化檢視 on commitMIT
- Oracle普通檢視和物化檢視的區別Oracle
- 12c 物化檢視 - 理解完全重新整理的物化檢視工作原理
- 物化檢視匯出匯入可能導致物化檢視日誌的失效
- MySQL檢視建表語句MySql
- oracle 檢視死鎖語句Oracle
- ORACLE中的物化檢視建立Oracle
- 資料庫的物化檢視資料庫
- 物化檢視日誌表被DROP後建立物化檢視報錯
- oracle檢視建立物件的DDL語句Oracle物件
- 檢視語句執行的時間
- Oracle如何根據物化檢視日誌快速重新整理物化檢視Oracle
- calcite物化檢視詳解
- Oracle物化檢視詳解Oracle
- ORACLE物化檢視測試Oracle
- Oracle 物化檢視案例分享Oracle
- 物化檢視梳理總結
- ZT 物化檢視詳解
- ORACLE物化檢視入門Oracle