我正在编写一个查询,并且我正在分析 SQL Profiler 跟踪以监控我的查询的性能和速度。
在执行此操作时,我注意到如果我在同一张表上运行 3 个不同的选择,这些选择比我在 WHERE 子句中使用 OR 将它们分组在一个选择中运行要快得多。
一个)
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)
二)
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)
这是两个查询的 Profiler 读数:
CPU | Reads | Writes | Duration(ms)
A) 15 | 1095 | 0 | 26
B) 531 | 456139 | 0 | 541
你能解释一下吗?
非常感谢。