2016-06-09 78 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都是視圖 –