1

このビュー クエリは、500,000 行を読み込むのに 2 分かかります。私は 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行は、1つ以上のテーブルスキャンが開始されていることを示します。推定実行プランはこれらを識別します。計画では、クエリのどの部分が最も全体的に「コスト」がかかるかも示され、ゼロにするのに役立ちます。

その内側のサブクエリを強調表示し、最初にその計画を確認します。次に、外側に向かって作業します。

于 2012-08-29T15:35:48.190 に答える