Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在查询运行期间,从物化视图提取数据是否会加载到表上_Sql_Oracle - Fatal编程技术网

Sql 在查询运行期间,从物化视图提取数据是否会加载到表上

Sql 在查询运行期间,从物化视图提取数据是否会加载到表上,sql,oracle,Sql,Oracle,我有一个简单的物化视图,它几乎由5个表组成。所有表都有超过1000万条记录。所以,我没有直接查询表,而是创建了一个物化视图,并每天刷新以用于报告 所以我的问题是,从物化视图进行查询会给我们的表增加负载吗?因为直接查询表单表会降低依赖于这些表的应用程序的速度,还是最好查询物化视图而不是这些表来进行报告?谢谢 以下是我的物化观点 create materialized view kztl_active_liq_mview Refresh Force On Demand As

我有一个简单的物化视图,它几乎由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             



    ;

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


因此,尽可能优化从MVIEW执行的查询非常重要,以避免系统过载。

是否多次查询物化视图?当您每天只查询一次时,它是非常无用的,因为选择基表需要与刷新物化视图类似的资源。我们每天早上9点刷新数据,这样我们每天都可以得到最后一天的数据。但我的问题不同,从物化视图中查询数据会给我们的表带来负载,因为直接从表中查询会使我们的应用程序变得沉重