-1

データベースで検索したい、Excel ファイルに保存されている 6700 個の ID のリストがあります。次のようなクエリがあります。

select distinct RespondentID,  QuestionID,Condition
from RespondentProfiles (nolock) 
where RespondentID in (10286334,13988335, 18834444,26134155, 8658775)
and QuestionID in (113) 

そして、私の ID は上記の RespondentID であり、次のようになります。

10286334,
13988335, 
18834444,
26134155,
 8658775,
 1616806,
 3470656,
30981782,
29302573,
29043779,
12899462,
 7420528,
17040183,
26129711,
19542507

Excelは、カンマ区切り値として保存できると言っています。しかし、私はこれを行うことができませんでした (つまり、すべての値をコンマで区切ったテキスト ファイルが必要です)。その後、クエリにカット アンド ペーストしました。どちらが少し醜く見えるかは間違いありませんが、実行可能だと思いますか、それとも遅すぎますか?

ありがとう!

4

2 に答える 2

1

まあ-IDのリストの場合、それらの負荷をチェリーピックする別の方法は実際にはありません

問題が速度である場合、インデックスが許す限り高速になります。RespondentID はクラスター化されたキー/インデックスですか?

もしそうなら、それはインデックスシークの負荷になるだけなので、それほど悪くはないはずです - そしてクラスター化されたインデックス (もしあれば) はこのクエリをカバーするはずです

于 2012-07-10T15:32:18.080 に答える
1

上記のクエリでは、QuestionID にインデックスが付けられている場合、サーバーはインデックスを使用して QuestionID が 113 である行を見つけます。次に、QuestionID が 113 であるすべての行をスキャンし、バイナリ検索を使用して RespondentID が ID のリストにあるかどうかを確認します。

したがって、QuestionID が 113 である行が 100 行ある場合、100 行すべてがスキャンされますが、データ セット全体はスキャンされません。

サーバーがテーブルスキャンではなくインデックススキャンを使用するように、カバリングインデックスを使用してこれを高速化できます。QuestionID、RespondentID、Condition の順に複合的な「カバー」インデックスを作成するだけです。

列のサイズによっては、カバリング インデックスのサイズに制限がある場合があります。スキーマを投稿すると、より詳細な回答を提供できます。

于 2012-07-10T15:41:10.067 に答える