タイトルが示すように...レコードがテーブルに存在するかどうかを判断するために、オーバーヘッドを最小限に抑えて最速の方法を見つけようとしています。
サンプルクエリ:
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
言う?
と交換される'TB100'
...第1および第2の両方のクエリは(...と言うまったく同じ結果を返します。1
この会話のため)。最後のクエリは'TB100'
期待どおりに返すかid
、テーブルにない場合は何も返しません。
目的はid
、テーブルにあるかどうかを把握することです。そうでない場合、プログラムは次にレコードを挿入します。そうである場合、プログラムはそれをスキップするか、この質問の範囲外の他のプログラムロジックに基づいてUPDATEクエリを実行します。
どちらが速く、オーバーヘッドが少ないですか?(これはプログラムの実行ごとに数万回繰り返され、1日に何度も実行されます)。
(M $提供のJDBCドライバーを介してJavaからM $ SQL Serverに対してこのクエリを実行)
if exists(select null from products where id = @id)
、クライアントから直接呼び出されたクエリの場合select case when exists (...) then 1 else 0 end
。