2017-09-10 58 views
-2
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()

+5

索引。索引。索引 –

+0

确保您有合适的索引来协助排序等。您还可以创建索引视图,请参见[ROW_NUMBER性能优化](https://stackoverflow.com/questions/20230172/row-number-performance-optimization) – user2321864

+0

“索引不会有太大的帮助,除非该视图是索引视图..” - 这是不正确的。除非它是嵌套视图,正如我们所知,经常会让优化器感到困惑。 –

回答

0

首先...考虑放弃视图并直接引用基表。视图,特别是复杂的视图和/或嵌套的视图,具有愚弄优化器的恶习,导致次优查询计划。 (注意:以上不适用于索引视图)

其次,你会想要所谓的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);