2017-09-10 17 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

最初にビューを削除し、ベーステーブルを直接参照することを検討してください。ビュー、特に複雑なビューおよび/またはネストされたビューは、オプティマイザをだますという厄介な癖があり、最適ではないクエリプランにつながります。 (注:上記はインデックス表示には適用されません)

第2に、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); 
関連する問題