Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

यदि एमवी ASNI ज्वाइन का उपयोग करता है तो क्वेरी पुनर्लेखन विफल हो जाता है

मैं वास्तव में समझा नहीं सकता क्यों , लेकिन मैंने एक अवलोकन किया है जो आपको समाधान . के लिए तैयार कर सकता है समस्या।

यहां 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')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PRO C में PREPARE QUERY कब विफल हो जाती है?

  2. Oracle में ASCII मान कैसे प्राप्त करें?

  3. वीएस2015 के लिए एट्यूनिटी द्वारा ओरेकल के लिए एसएसआईएस माइक्रोसॉफ्ट कनेक्टर नहीं दिखा रहा है

  4. INSERT/UPDATE के लिए Oracle SQL में MERGE स्टेटमेंट में शर्तें जोड़ना

  5. Oracle प्रक्रिया के भीतर तत्काल निष्पादित करें