私はクエリを作成しており、SQL Profilerトレースを分析して、クエリのパフォーマンスと速度を監視しています。
これを行っているときに、同じテーブルで3つの異なるselectを実行した場合、WHERE句にORを付けて1つのselectにグループ化して実行した場合よりもはるかに高速であることに気付きました。
A)
SELECT * FROM navigation_trees nt INNER JOIN contents c ON c.navigation_tree_id = nt.id WHERE nt.id = @NodeID
SELECT * FROM navigation_trees nt INNER JOIN contents c ON c.navigation_tree_id = nt.id WHERE nt.id = @ParentID
SELECT * FROM navigation_trees nt INNER JOIN contents c ON c.navigation_tree_id = nt.id WHERE nt.id IN (SELECT id FROM @ChildrenIDS)
B)
SELECT * FROM navigation_trees nt INNER JOIN contents c ON c.navigation_tree_id = nt.id
WHERE
nt.id = @NodeID OR
nt.id = @ParentID OR
nt.id IN (SELECT id FROM @ChildrenIDS)
そして、これが2つのクエリのプロファイラー測定値です。
CPU | Reads | Writes | Duration(ms)
A) 15 | 1095 | 0 | 26
B) 531 | 456139 | 0 | 541
光を当てることができますか?
どうもありがとう。