मैं वास्तव में समझा नहीं सकता क्यों , लेकिन मैंने एक अवलोकन किया है जो आपको समाधान . के लिए तैयार कर सकता है समस्या।
यहां explain_mview
का परिणाम दिया गया है क्वेरी . के लिए आपके MV
. का
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
समस्या IMO है REWRITE_GENERAL = 'N'
. में
अगर आप वही दोहराते हैं explain_mview
केवल POJO
. का उपयोग कर रहे हैं (=Oracle में सादा पुराना जुड़ाव) आपको एक अलग परिणाम दिखाई देगा।
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
फिर से महत्वपूर्ण `REWRITE_GENERAL ='Y'।
ध्यान दें कि मैं 18.4 XE का उपयोग कर रहा हूं और यह बहुत ही संदेहास्पद है और इसे Oracle समर्थन द्वारा स्पष्ट किया जाना चाहिए।
अंतिम खुशखबरी है, यदि आप MV
. को परिभाषित करते हैं ओरेकल जॉइन . के साथ , आप ASNI में शामिल होने का उपयोग कर सकते हैं और आप फिर से लिखना देखेंगे:
उदाहरण
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')