0

私のコードには、このようなクエリがあります

SELECT id,name
FROM people

sqldatareaderを使用してデータを取得します。

クエリを変更した場合

SELECT id,name
FROM people
WHERE NOT EXISTS(
SELECT *
FROM people_died
WHERE people_died.id = people.id
)

dotTraceを使用すると、2番目のクエリでgetvalueの呼び出しに時間がかかることがわかります。その理由を知りたいのですが、...

それが正当な理由ではないと絶対に確信している場合は、SqlDataReader.getValueのパフォーマンスに影響を与える可能性があるものを教えてください。

ありがとう

編集:クエリに含まれていないテーブル「people」の列に依存している可能性はありますか?(たとえば、このテーブルには多くのntext列があります)

4

3 に答える 3

1

クエリは多くの行を返しますか?

ASqlDataReaderはデータをストリーミングします。GetValue呼び出しがより多くの行がストリーミングされるのを待っている可能性があり、2番目のケースでは、クエリがより複雑になるため、発生に時間がかかります。

于 2010-09-17T14:46:09.467 に答える
0

やってみませんか

SELECT p.id,name
FROM people p left join people_died d
on p.id = d.id
WHERE d.id is null

パフォーマンスが向上する可能性があります

于 2010-09-17T15:16:50.330 に答える
0

私の質問に対する答えがあります:はい

元のクエリでは、非常に大きなIN句(約1400 id)がありましたが、この句を削除すると、getValueの呼び出しが通常の実行時間になるため、回避策を見つける必要があります。

とにかくありがとう

于 2010-09-20T08:13:55.760 に答える