Sql 在物化视图中重新写入查询,定义查询具有';联合所有';在甲骨文中
我正在尝试一些关于物化视图(mViews)的训练,以便确定是否可以使用mViews来提高查询执行的性能 作为此活动的一部分,我们创建了以下mViewSql 在物化视图中重新写入查询,定义查询具有';联合所有';在甲骨文中,sql,oracle,materialized-views,Sql,Oracle,Materialized Views,我正在尝试一些关于物化视图(mViews)的训练,以便确定是否可以使用mViews来提高查询执行的性能 作为此活动的一部分,我们创建了以下mView CREATE MATERIALIZED VIEW v2mv_fast_accunion12 BUILD IMMEDIATE refresh fast start WITH sysdate next (sysdate + 1) ENABLE QUERY REWRITE AS SELECT 1 AS marker,d.OPERATINGA
CREATE MATERIALIZED VIEW v2mv_fast_accunion12
BUILD IMMEDIATE
refresh fast start WITH sysdate next (sysdate + 1)
ENABLE QUERY REWRITE
AS
SELECT 1 AS marker,d.OPERATINGAIRLINECODE,d.FFPPROGRAM,d.ACCRUALPOSTINGSTATUS,
NULL AS tot_records,b.RECEIVERALERTCODE receiver_alert,b.SENDERALERT sender_alert,
a.ROWID ra,b.ROWID rb,c.ROWID rc,d.ROWID rd
FROM PAI_FILE A , PAI_VALID_ACCRUAL B,pai_file c,pai_valid_accrual d
WHERE a.file_id= b.file_id AND
c.file_id = d.file_id
AND a.filetype=1
AND c.filetype=2
AND b.transactionid=d.transactionid
UNION ALL
SELECT 2 AS marker,b.OPERATINGAIRLINECODE,b.FFPPROGRAM,b.ACCRUALPOSTINGSTATUS,b.file_id AS tot_records,
b.RECEIVERALERTCODE receiver_alert,b.SENDERALERT sender_alert,a.ROWID ra,b.ROWID rb,NULL AS rc,NULL AS rd
FROM pai_file a,pai_valid_accrual b
WHERE a.file_id=b.file_id
AND
a.filetype=1
;
已创建物化视图。创建的mView的功能如下
MV_REPORT
Capable of:
REFRESH_COMPLETE
REFRESH_FAST
REFRESH_FAST_AFTER_INSERT
REFRESH_FAST_AFTER_ONETAB_DML
REFRESH_FAST_AFTER_ANY_DML
然后,我试图使查询重写为下面的查询工作
SELECT OPERATINGAIRLINECODE OPE,FFPPROGRAM FFP,
COUNT(TOTALNUMBEROFRECORDS) TOTALNUMBEROFRECORDS,
SUM(ACCRUAL_01) ACCRUAL_01,SUM(ACCRUAL_03) ACCRUAL_03,
COUNT( REJECT_HUB) REJECT_HUB,SUM(ACCRUAL_02) ACCRUAL_02,
SUM(Alertedbyhub) Alertedbyhub
FROM (
SELECT d.OPERATINGAIRLINECODE,d.FFPPROGRAM, NULL AS TOTALNUMBEROFRECORDS ,
CASE WHEN d.ACCRUALPOSTINGSTATUS = '01' THEN 1 ELSE 0 END ACCRUAL_01,
CASE WHEN d.ACCRUALPOSTINGSTATUS = '03' THEN 1 ELSE 0 END ACCRUAL_03,
NULL AS REJECT_HUB,
CASE WHEN d.ACCRUALPOSTINGSTATUS = '02' THEN 1 ELSE 0 END ACCRUAL_02,
NULL AS Alertedbyhub
FROM PAI_FILE A , PAI_VALID_ACCRUAL B,pai_file c,pai_valid_accrual d
WHERE a.file_id= b.file_id AND
c.file_id = d.file_id
AND a.filetype=1
AND c.filetype=2
AND a.RECEIVED_DATE BETWEEN To_Date('20150101 00:00:00','YYYYMMDD HH24:MI:SS') AND To_Date('20150130 23:59:59','YYYYMMDD HH24:MI:SS')
AND b.transactionid=d.transactionid
AND d.accrualpostingstatus IN ('01','02','03')
AND d.OPERATINGAIRLINECODE IN ('AB')
UNION ALL
SELECT b.OPERATINGAIRLINECODE,b.FFPPROGRAM,b.file_id TOTALNUMBEROFRECORDS,
NULL AS ACCRUAL_01,NULL AS ACCRUAL_03,NULL AS REJECT_HUB,NULL AS ACCRUAL_02,
CASE WHEN b.RECEIVERALERTCODE IS NOT NULL OR b.SENDERALERT IS NOT NULL THEN 1 ELSE 0 END Alertedbyhub
FROM pai_file a,pai_valid_accrual b
WHERE a.file_id=b.file_id
AND
a.filetype=1
AND a.RECEIVED_DATE BETWEEN To_Date('20150101 00:00:00','YYYYMMDD HH24:MI:SS') AND To_Date('20150130 23:59:59','YYYYMMDD HH24:MI:SS')
AND b.OPERATINGAIRLINECODE IN ('AB')
UNION ALL
SELECT B.OPERATINGAIRLINECODE,B.FFPPROGRAM,NULL AS TOTALNUMBEROFRECORDS,NULL AS ACCRUAL_01,
NULL AS ACCRUAL_03,b.rejected_accrual_id REJECT_HUB,NULL AS ACCRUAL_02,
NULL AS Alertedbyhub
FROM pai_file a,pai_rejected_accrual b
WHERE a.file_id = b.file_id
AND A.RECEIVED_DATE BETWEEN To_Date('20150101 00:00:00','YYYYMMDD HH24:MI:SS') AND To_Date('20150130 23:59:59','YYYYMMDD HH24:MI:SS')
AND b.OPERATINGAIRLINECODE IN ('AB')
) WHERE (OPERATINGAIRLINECODE IS NOT NULL AND FFPPROGRAM IS NOT NULL) GROUP BY OPERATINGAIRLINECODE,FFPPROGRAM;
在上面的查询中,我希望第一个和第二个联合查询子集使用创建的mView
已检查查询的解释计划。但它不是通过查询重写使用mView
下面是查询的解释计划
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1146 | 50424 | | 1116K (1)| 03:43:13 |
| 1 | HASH GROUP BY | | 1146 | 50424 | | 1116K (1)| 03:43:13 |
| 2 | VIEW | | 6958K| 291M| | 1115K (1)| 03:43:10 |
| 3 | UNION-ALL | | | | | | |
|* 4 | HASH JOIN | | 2453K| 198M| 2432K| 646K (1)| 02:09:23 |
|* 5 | TABLE ACCESS FULL | PAI_FILE | 88658 | 1385K| | 1102 (1)| 00:00:14 |
|* 6 | HASH JOIN | | 3945K| 259M| 116M| 630K (1)| 02:06:07 |
|* 7 | HASH JOIN | | 2220K| 91M| | 458K (1)| 01:31:46 |
|* 8 | TABLE ACCESS FULL | PAI_FILE | 86013 | 671K| | 1099 (1)| 00:00:14 |
|* 9 | TABLE ACCESS FULL | PAI_VALID_ACCRUAL | 3680K| 122M| | 457K (1)| 01:31:32 |
| 10 | INDEX FAST FULL SCAN| ACCRUAL_IDX7 | 52M| 1295M| | 71813 (1)| 00:14:22 |
|* 11 | HASH JOIN | | 4500K| 133M| 2432K| 467K (1)| 01:33:30 |
|* 12 | TABLE ACCESS FULL | PAI_FILE | 88658 | 1385K| | 1102 (1)| 00:00:14 |
|* 13 | TABLE ACCESS FULL | PAI_VALID_ACCRUAL | 7237K| 103M| | 456K (1)| 01:31:24 |
|* 14 | HASH JOIN | | 4672 | 132K| | 1546 (1)| 00:00:19 |
|* 15 | TABLE ACCESS FULL | PAI_REJECTED_ACCRUAL | 4672 | 74752 | | 442 (1)| 00:00:06 |
|* 16 | TABLE ACCESS FULL | PAI_FILE | 359K| 4561K| | 1102 (1)| 00:00:14 |
----------------------------------------------------------------------------------------------------------
使用“union all”将查询重写为工作状态,我是否遗漏了什么
以这种方式使用mView的方法是否正确?请推荐我
提前谢谢 您可以检查为什么不使用它,有一些因素会影响这一点 但是DBMS_MVIEW.EXPLAIN_REWRITE过程建议是否可以对查询进行查询重写,如果可以,将使用哪些物化视图。它还解释了为什么不能重写查询 有关如何使用此功能的更多信息,您可以找到