如何优化视图内的查询

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

以上是关于如何优化视图内的查询的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 MySQL 视图

数据库理论之视图事务索引优化查询

SQL Server 视图查询慢,如何优化?请不要复制粘贴谢谢

误用的数据库视图 (SQL Server) - 如何优化

如何优化多表连接视图以获得更快的响应?

MySQL:如何获得视图的模块化,但优化更长的代码?