【问题标题】:Query Performance is down because of Row_Number()由于 Row_Number() 查询性能下降
【发布时间】:2017-09-10 07:27:14
【问题描述】:
SELECT 
    ROW_NUMBER() OVER (PARTITION BY a.Account, a.Product, a.[Week] ORDER BY  a.WaterFallMeasures) AS [Row], 
    col1, col2
FROM
    View  

我的表中有数百万条记录。由于row_number(),查询性能下降。如何优化?

【问题讨论】:

  • 索引。索引。索引
  • 确保您有适当的索引来协助排序等。您还可以创建索引视图,请参阅ROW_NUMBER performance optimization
  • “除非该视图是索引视图,否则索引不会有太大帮助..” - 这是不正确的。除非它是嵌套视图,我们知道这经常让优化器感到困惑。

标签: sql-server query-optimization


【解决方案1】:

首先...考虑丢失视图并直接引用基表。视图,特别是复杂的视图和/或嵌套视图,有欺骗优化器的讨厌习惯,导致次优查询计划。 (注意:以上不适用于索引视图)

其次,您需要所谓的POC index (Partitioning, Ordering, and Coverage)。所以,在你的情况下,它会是......

CREATE NONCLUSTERED INDEX ix_BaseTable_Account_Product_Week_WaterFallMeasures ON dbo.BaseTable 
    (Account, Product, Week, WaterFallMeasures) INCLUDE (col1, col2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-18
    • 2020-05-19
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多