1

このクエリをストアド プロシージャとして使用しています。

SELECT     ID
    FROM         dbo.tblRentalUnit
    WHERE     (NOT EXISTS
        (SELECT     1 AS Expr1
        FROM          dbo.tblTenant
        WHERE      (dbo.tblRentalUnit.ID = UnitID)))

Microsoft SQL Server Management Studio Express では、16 ミリ秒で実行されます。Visual Studio 2008 によって自動生成された型指定されたデータセットにある場合、64,453 ミリ秒で実行されます。1分以上。

見積もりと実行計画は次のようになります。

選択 [0%] <- フィルター [1%] <- マージ結合 (左外部結合) [28%] <- インデックス スキャン [16%]
                                                                 <- 並べ替え [43%] <- クラスター化インデックス スキャン [12%]

この違いはなぜですか?どうすれば修正できますか?

4

3 に答える 3

2

誤ってキャッシュされたクエリプランのように聞こえます。

インデックスと統計は最新ですか?

ところで、tblTenant.UnitIdがtblRentalUnit.IDへの外国キーである場合、クエリは次のように書き直すことができます。

SELECT ru.ID    
FROM         
    dbo.tblRentalUnit ru
    LEFT JOIN dbo.tblTenant t ON ru.ID = t.UnitID
WHERE
    t.UnitID IS NULL
于 2009-05-26T14:03:09.817 に答える
0

各テストの前に(いずれかのクライアントから)バッファーをフラッシュしましたか?各テストの間にDBCCDROPCLEANBUFFERSとDBCCFREEPROCCACHEを実行していることを確認してください。

于 2009-05-26T14:07:31.493 に答える
0

tblRentalUnit.IDは適切にインデックス付けされていますか?

于 2009-05-26T14:19:46.743 に答える