2017-09-10 57 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);