適度に高い間隔でSQLレコードの存在をチェックする.NETコードがいくつかあります。私はこのチェックをできるだけ「安い」ものにしたいと思っています。
私は2つのクエリの特徴を疑問に思っています:
IF EXISTS(SELECT 1
FROM BigTable
WHERE SomeColumn = 200)
SELECT 1 AS FOUND
ELSE
SELECT 0 AS FOUND
VS
SELECT TOP 1 1
FROM BigTable
WHERE SomeColumn = 200
どちらも同様の実行計画を作成します。ただし、SELECT TOP 1 1の実行速度は速いようです。解析するクエリが少なくなり、レコードが見つからない場合は、パイプへの送信が少なくなります。また、IF EXISTSの戻り値をマーシャリングするのではなく、レコードカウントを確認するだけでよいため、クライアントでの実行速度が速いと想定しています。
パフォーマンス上の利点のほとんどはごくわずかです。しかし、両方が一貫して同じ結果を返す場合は、少し速い方法を選択してみませんか?
「SELECTTOP11」は、.NETにレコードが存在するかどうかを確認するための最良の方法ですか?
(.NET 3.5を使用していますが、LINQはアプリケーションの他の場所では使用されていないため、回避しようとしています。移行/書き換えしているレガシーVB6アプリもいくつかあるため、これも実行する必要があります。)
編集:デザインについてもう少し詳しく説明します。このレコードは「ヘッダー」です。このヘッダーが見つかったときに読み取られる/解析される子レコードを持つ別のテーブルがあります。記録がないのは良いことです。やるべきことはありません。
EDIT2:条件を満たすレコードの欠如がより頻繁に発生します。彼らは散発的な波でやってくる。