次のクエリに取り組んでいます。
Query 1: SELECT * From TabA INNER JOIN TabB on TabA.Id=TabB.Id
Query 2: SELECT * From TabA WHERE Id in (SELECT Id FROM TabB)
Query 3: SELECT TabA.* From TabA INNER JOIN TabB on TabA.Id=TabB.Id
これらのクエリを SQL Server プロファイラーで調査したところ、興味深い事実がいくつか見つかりました。
- クエリ 1 には 2.312 秒かかります
- クエリ 2 には 0.811 秒かかります
- クエリ 3 には 0.944 秒かかります
TabA 48716 行
TabB 62719 行
基本的に私が求めているのは、クエリ 3 ではなくクエリ 1 に時間がかかる理由です。「サブクエリ」が内部結合よりも遅いことは既にわかっていますが、ここではクエリ 2 が最速です。なぜ?