如何优化视图内的查询
Posted
技术标签:
【中文标题】如何优化视图内的查询【英文标题】:how to Optimize query inside view 【发布时间】:2016-06-09 08:28:54 【问题描述】:我有以下查询,这在我看来需要很长时间。我不能使用索引,因为它是视图,我在视图中使用 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
【问题讨论】:
请发布架构和解释/执行计划 【参考方案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)
这应该会显着提高您的表现。
【讨论】:
谢谢,但它是视图,所以我不能使用索引,如果我要使用索引来查看视图,我必须使用模式绑定,但我再次使用 select * 语句并且使用模式绑定你不能使用它。 不要在视图上添加索引!把它们放在桌子上!会影响视线! @ShaliniSinghRao Shell_v3 和 Shell_v41 都是视图 哦,我明白了。然后按照以下步骤操作:create table as select from (the view)
,然后在它们上添加正确的索引,然后执行选择。之后放下桌子。如果每天需要,您可以多次执行此操作。 @shalinisinghrao以上是关于如何优化视图内的查询的主要内容,如果未能解决你的问题,请参考以下文章