Tôi không thể thực sự giải thích được tại sao , nhưng tôi đã đưa ra một nhận xét có thể khiến bạn phải giải quyết vấn đề vấn đề.
Đây là kết quả của explain_mview
cho truy vấn của MV
của bạn
exec dbms_mview.explain_mview(q'[select A.y, B.z from A join B on A.x = B.x]');
SELECT capability_name, possible, SUBSTR(related_text,1,8)
AS rel_text, SUBSTR(msgtxt,1,60) AS msgtxt
FROM MV_CAPABILITIES_TABLE
WHERE capability_name like '%REWRITE%'
ORDER BY seq;
CAPABILITY_NAME P REL_TEXT MSGTXT
------------------------------ - -------- ------------------------------------------------------------
REWRITE Y
REWRITE_FULL_TEXT_MATCH Y
REWRITE_PARTIAL_TEXT_MATCH Y
REWRITE_GENERAL N the reason why the capability is disabled has escaped analys
REWRITE_PCT N general rewrite is not possible or PCT is not possible on an
Vấn đề là IMO trong REWRITE_GENERAL = 'N'
Nếu bạn lặp lại explain_mview
tương tự chỉ sử dụng POJO
(=tham gia thuần túy cũ trong Oracle) bạn sẽ thấy một kết quả khác.
truncate table mv_capabilities_table;
exec dbms_mview.explain_mview(q'[select A.y, B.z from A, B where A.x = B.x]');
CAPABILITY_NAME P REL_TEXT MSGTXT
------------------------------ - -------- ------------------------------------------------------------
REWRITE Y
REWRITE_FULL_TEXT_MATCH Y
REWRITE_PARTIAL_TEXT_MATCH Y
REWRITE_GENERAL Y
REWRITE_PCT N general rewrite is not possible or PCT is not possible on an
PCT_TABLE_REWRITE N A relation is not a partitioned table
PCT_TABLE_REWRITE N B relation is not a partitioned table
Một lần nữa quan trọng `REWRITE_GENERAL ='Y'.
Lưu ý rằng tôi đang sử dụng 18.4 XE và điều này rất đáng ngờ và cần được làm rõ với Bộ phận hỗ trợ của Oracle.
Tin tốt cuối cùng là, nếu bạn xác định MV
với Oracle tham gia , bạn có thể sử dụng tham gia ASNI và bạn sẽ thấy phần viết lại:
Ví dụ
create materialized view MV2
enable query rewrite
as
select
A.y, B.z from A, B where A.x = B.x
EXPLAIN PLAN SET STATEMENT_ID = 'jara1' into plan_table FOR
select A.y, B.z from A join B on A.x = B.x where y = 'A' and z = 'Z'
;
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', 'jara1','ALL'));
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3846 | 15384 | 456 (8)| 00:00:01 |
|* 1 | MAT_VIEW REWRITE ACCESS FULL| MV2 | 3846 | 15384 | 456 (8)| 00:00:01 |
-------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("MV2"."Z"='Z' AND "MV2"."Y"='A')