私はクエリを行うSQL Server 2016でテーブル(Aと呼ぶ)を持っています。私は決定的なステータスを持つ行だけを選択する必要があるので、いくつかの行を除外する必要があります。テーブルAのレコードidとcol1とcol2の2つのカラムを含む別のテーブル(B)があります。これらの列が空でない場合、対応するレコードは最終とみなされます。テーブルAとテーブルBの間には1対1の関係があります。これらのテーブルはかなり大きいので、最も効率的なクエリを使用したいと考えています。私はどちらを選ぶべきですか?このSQLクエリを実行する最も速い方法はどれですか?
SELECT *
FROM TableA
WHERE record_id IN
(SELECT record_id FROM TableB WHERE col1 IS NOT NULL AND col2 IS NOT NULL)
SELECT a.*
FROM TableA a
INNER JOIN TableB b ON a.record_id = b.record_id
WHERE b.col1 IS NOT NULL AND b.col2 IS NOT NULL
SELECT a.*
FROM TableA a
INNER JOIN TableB b
ON a.record_id = b.record_id
AND b.col1 IS NOT NULL
AND b.col2 IS NOT NULL
私が考えていなかったより速い方法があれば、もちろん共有してください。また、なぜ1つのクエリが他のクエリより速いのかを知りたいのは非常に興味があります。
Eric Lippertの優れた[どちらが速いのですか?](https://ericlippert.com/2012/12/17/performance-rant/)を読んでください: "...あなたは2頭の馬がいて、馬の短い説明を書いたり、インターネット上に投稿したり、ランダムな見知らぬ人にもっと速いかどうかを尋ねたりしないでください... " –
あなたはそれを試してみてどうですか?でる? –
私はしましたが、結果は異なります。差はかなり重要です(〜20%)が、より速いクエリは常に同じではありません。 –