1

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

1 回答 1

1

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

突出显示该内部子查询并首先查看该计划。然后向外工作。

于 2012-08-29T15:35:48.190 回答