将从物化视图中提取数据在查询运行期间加载表

时间:2015-10-01 07:23:31

标签: sql oracle

我有一个简单的物化视图,它由近5个表组成。所有表都有超过1000万条记录。因此,我没有直接在桌面上查询,而是创建了一个物化视图,并每天刷新以进行报告。

所以我的问题是从物化视图中查询会给我们的表带来负担吗? (因为直接查询表单表会减慢依赖于这些表的应用程序的速度),或者查询物化视图而不是这些表以进行报告是否是一个好主意?谢谢。

以下是我的物化视图。

 create materialized view kztl_active_liq_mview
    Refresh Force On Demand
    As

          SELECT     '01-mar-2012'from_date,(LAST_DAY(ADD_MONTHS(SYSDATE,-2)))to_date, a.Lnu Account_Number, a.Product_Code, a.Amount_Disbursed, (a.Amount_Disbursed-Nvl(B.Amount_Paid,0))Outstaind,
                      DSBR_MAIN_INT, DUE_PRINCIPAL, SETTLED_PRINCIPAL, DUE_MAIN_INT, B.Amount_paid PAID_PRINCIPAL, H.amount_paid PAID_MAIN_INT, NVL(k.od_prp,0)od_prp, 
                      NVL(m.od_sc,0)od_sc, NVL(N.NOT_YET_DUE_PRP,0)NOT_YET_DUE_PRP, p.NOT_YET_DUE_SC,
                      a.Value_Date, a.Maturity_Date, 
                      User_Defined_Status, Branch_Code, Branch_Name, Account_Status, Funding_Source, Sex, Crop
          From
                  (
                   Select   Cam.Customer_Id Cnu, Stc.Unique_Id_Value Cni, Stc.Customer_Name1 Can, Cam.Account_Number Lnu,Cam.Product_Code, 
                            Cam.Amount_Disbursed, Cam.Value_Date, Cam.Maturity_Date, (Cam.Maturity_Date - Cam.Value_Date)  As Lpf_Days,
                            Cam.Branch_Code, Stb.Branch_Name,Cam.Account_Status, Cam.User_Defined_Status, Cam.Field_Char_3 Crop, 
                            Cam.Field_Char_5 Funding_Source, scp.sex
                   From     Cltb_Acct_Master Cam Inner Join Sttm_Customer Stc On
                            Cam.Customer_Id = Stc.Customer_No Inner Join Sttm_Cust_Personal Scp On
                            Cam.Customer_Id = Scp.Customer_No Inner Join Sttm_Branch Stb On
                            Cam.Branch_Code = Stb.Branch_Code
                   Where    Cam.Account_Status in ('A','L')
                   --And      Cam.Value_Date >= '22-sep-2013'
                   And      Cam.Product_Code  In ('KZTL')
                   )A    

                   Left Outer Join 

                   (
                   Select Account_Number, Max(Paid_Date) Paid_Date, NVL(Sum(Amount_Paid),0) Amount_Paid , Component_Name
                   From Cltb_Amt_Paid
                   Where Component_Name = 'PRINCIPAL'
                   And Paid_Date <= (SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-2)) FROM dual)
                   Group By Account_Number,  Component_Name
                   ) B On A.LNU = B.Account_Number

                   LEFT Outer join
                   (------------------------New1
                   Select Account_Number, NVL(Sum(Amount_Paid),0) Amount_Paid
                   From Cltb_Amt_Paid
                   Where Component_Name  In ('MAIN_INT','PENAL_INT')
                   And Paid_Date <= (SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-2)) FROM dual)
                   Group By Account_Number
                   )H On A.LNU = H.Account_Number             



    ;

1 个答案:

答案 0 :(得分:0)

一旦创建/刷新了物化视图,用于创建它的表将不会受到物化视图上的查询的影响 - 这些是单独的对象。 物化视图上的查询仍然可能会产生性能问题,因为在物化视图上执行的大量查询通常会影响整个数据库。

出于这个原因,为了避免系统过载,必须尽可能地调整从MVIEW完成的查询。