2016-06-09 46 views
1

我有以下查询哪些需要很长时间我的看法。我不能使用索引,因为它是视图,我在我的视图中使用Select *语句。如何优化内部视图查询

SELECT * 
    FROM shell_v3 v3, 
    Shell_v41 v41, 
    core_demandsupply ds1, 
    core_demandsupply ds2 
    WHERE v41.profile_group = v3.profile_group 
    AND v41.company = v3.company 
    AND v41.product = v3.product 
    AND v41.source_facility = ds2.facility 
    AND v41.facility = ds1.facility 
    AND case when ds1.reqd_date < getdate() 
      then getdate() 
      else ds1.reqd_date 
     end between v41.effective_Date and V41.Inactive_Date 
+0

请张贴架构和EXPLAIN /执行计划 –

回答

1

为什么你不能使用索引?该视图仍然从现有表中进行选择,因此可以在其上添加索引。

考虑加入(如果不存在)以下指标:

shell_v3(profile_group,company,product) 
Shell_v41(profile_group,company,product,source_facility,facility) 
Shell_v41(facility,effective_Date,Inactive_Date) 
core_demandsupply(facility,reqd_date) 

这应该显著提高你的表现。

+0

谢谢,但它是视图,所以我不能使用索引,如果我要使用索引视图我必须使用架构绑定,但我再次使用选择*语句和模式绑定你不能使用它。 –

+0

请勿在视图中添加索引!将它们添加到桌子上!这会影响视图! @ShaliniSinghRao – sagi

+0

Shell_v3和Shell_v41都是视图 –