优化查询

时间:2012-08-11 01:01:45

标签: sql-server sql-server-2008 tsql query-optimization

此视图查询需要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

1 个答案:

答案 0 :(得分:1)

在SSMS中使用估算执行计划。如果您使用的是2008 R2,SSMS会建议“缺失索引”,这可能会改善总体时间。 55秒时500,000行表示正在进行一次或多次表扫描。估计执行计划将识别这些。该计划还将显示查询的哪些部分“成本”最大,帮助您实现归零。

突出显示内部子查询并查看该计划的第一个。然后向外工作。