1

なぜこれが約1秒で機能するのか誰かが知っていますか?

select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = 2142870

ただし、これには10秒以上(最大5分)かかります。

declare @groupId int
set @groupId = 2142870
select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = @groupId

このクエリでibatisとまったく同じ問題が発生していますが、ibatisが15秒ほどでタイムアウトし、コードが失敗する点が異なります。(ハードコードされた1秒未満、intパラメーターによるタイムアウト)

4

2 に答える 2

0

値がハードコーディングされている場合、クエリオプティマイザは可能な限り最適なプランを選択できます。クエリオプティマイザは値が何であるかを知らないため、値が変数の場合は発生しません。

ここでできることは、KY_TO_STP列のインデックスを作成することです。クラスター化されていないことを確認してください。

create nonclustered index on QTS_LOAD_INFO(KY_TO_STP)

uniqueのすべての値をKY_TO_STP一意にし、が主キーである場合、または各行を一意に識別できる場合に追加できます(ただし、テーブルごとに1つのクラスター化インデックスしか持てないことを忘れないでくださいnonclustered)。clusteredKY_TO_STP

于 2012-08-24T09:36:20.060 に答える
0

Have you got an error? Did you run this code using different programs (for example ase isql and interactive sql)?

于 2012-08-22T15:12:30.320 に答える