需要优化查询以在索引视图中使用

Posted

技术标签:

【中文标题】需要优化查询以在索引视图中使用【英文标题】:Need to optimize query to use in an indexed view 【发布时间】:2016-03-13 04:54:12 【问题描述】:

由于引用的表 t,我在无法索引的视图中有此查询。我已经转换为一个子查询,它也不起作用,而且速度慢了一点。

我只需要 productid 的最后售价。

SELECT op.productId, op.Price, o.createdat
from (
    SELECT max(op.OrderProductid), MAX(o.OrderId)
    FROM dbo.OrderProduct op
    INNER JOIN dbo.Order so ON op.OrderId = so.OrderId 
    WHERE o.StatusId IN (1,2,3)
    GROUP BY op.ProductId
) t
join OrderProduct op on op.Productid = t.Productid
join Order o ON o.OrderId = op.OrderId

【问题讨论】:

【参考方案1】:

考虑到你的最后一句话:

我只需要 productid 的最后售价。

您可以为此使用row_number

select *
from (
    select op.productid, op.price, o.createdat,
        row_number() over (partition by op.productid order by o.orderid desc) rn
    from orderproduct op 
        join order o on op.orderid = o.orderid
) t
where rn = 1

【讨论】:

这需要我当前查询的 2 倍,并且不能用于索引视图

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

sql查询优化 索引优化

如何优化视图内的查询

SQL Server 索引优化——无用索引

SQL Server查询优化和事务处理

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

如何在 MYSQL 中优化此查询?需要做啥