Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn Viết lại Không thành công nếu MV sử dụng ASNI Tham gia

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')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL / SQL:Ví dụ về DBMS_SCHEDULER.CREATE_JOB

  2. Truy vấn SQL:Trả về bản ghi giá trị tối đa của một nhóm

  3. Lỗi truy vấn SQL:“thiếu dấu ngoặc đơn bên phải”

  4. Tên người dùng và mật khẩu nào nên được nhập khi kết nối với SQL * Plus sau khi cài đặt Oracle 11g?

  5. Làm cách nào để kết nối với cơ sở dữ liệu Oracle từ Ant bằng cách sử dụng tnsname?