2

いくつかのデータを選択するクエリがあり、いくつかのパラメーターを渡します。

DECLARE @FromAccDocNo     INT = 1,
        @ToAccDocNo       INT = 999999999,
        @FromDate         CHAR(10) = '1900/01/01',
        @ToDate           CHAR(10) = '2999/12/30',
        @L1Code           INT = 129

SELECT ad.AccDocNo,
       ad.AccDocDate,
       add1.Row,
       add1.RowComment,
       add1.Debit,
       add1.Credit
FROM   AccDoc ad
       INNER JOIN AccDocDetail add1
            ON  add1.AccDocNo = ad.AccDocNo
       INNER JOIN Topic t
            ON  t.TopicCode = add1.TopicCode
WHERE  t.L1Code = @L1Code -- here is the difference
       AND add1.AccDocNo BETWEEN @FromAccDocNo AND @ToAccDocNo
       AND ad.EffectiveDate BETWEEN @FromDate AND @ToDate
ORDER BY
       ad.AccDocNo

最初に、値 129 を明示的に次のように記述します@L1Code(0.010 秒かかります) 。

2 番目のフォームでは、クエリに渡し@L1Codeます (2.500 秒かかります)

誰が何が起こるか説明できますか?

4

1 に答える 1

3

標準参照をお読みください:アプリケーションで遅く、SSMS で高速ですか? (具体的にはこのビット)

OPTION (RECOMPILE)修正する 1 つの方法は、クエリの最後に追加することです。

于 2013-10-19T10:44:07.530 に答える