此视图查询需要2分钟才能加载500 000行。
我正在使用EF 4.0并在DataGrid上加载此视图的线程。
如何优化它以便在更短的时间内加载?
更新:我将查询更新为此,现在需要55秒但仍然太长了!
SELECT ROW_NUMBER() OVER ( ORDER BY ss.IDStore_CardStore DESC ) AS Id_PK ,
SC.IDStockCardIndex ,
SC.Designation ,
ISNULL(P.PMP, 0) PMP ,
ISNULL(SS.Quantity, 0) Quantity ,
SS.UnitePrice * SS.Quantity AS SubTotalStockCard ,
S.StoreName ,
SS.IDPurchaseInvoice
FROM dbo.Stores S
INNER JOIN dbo.StockCardsStores ss ON S.IDStore = ss.IDStore
RIGHT OUTER JOIN dbo.StockCard SC ON ss.IDStockCardIndex = SC.IDStockCardIndex
LEFT OUTER JOIN ( SELECT SUM(UnitePrice * Quantity) / SUM(Quantity) AS PMP ,
IDStockCardIndex
FROM dbo.StockCardsStores AS SCS
GROUP BY IDStockCardIndex
) AS P ON P.IDStockCardIndex = SC.IDStockCardIndex
答案 0 :(得分:1)
在SSMS中使用估算执行计划。如果您使用的是2008 R2,SSMS会建议“缺失索引”,这可能会改善总体时间。 55秒时500,000行表示正在进行一次或多次表扫描。估计执行计划将识别这些。该计划还将显示查询的哪些部分“成本”最大,帮助您实现归零。
突出显示内部子查询并查看该计划的第一个。然后向外工作。