对于内部联接,在JOIN ON
子句或WHERE
子句中应用过滤器的性能是否有所不同?哪个会更有效,或者优化器将使它们相等?
加入
SELECT u.name
FROM users u
JOIN departments d
ON u.department_id = d.id
AND d.name = 'IT'
VS
哪里
SELECT u.name
FROM users u
JOIN departments d
ON u.department_id = d.id
WHERE d.name = 'IT'
甲骨文11gR2
应该没有区别。在这两种情况下,优化器都应生成相同的计划,并且应该能够基于特定查询的最有效方法,在这两种情况下的连接之前,之后或之中应用谓词。
当然,事实优化可以做一些事情,一般来说,是不能保证优化器会做一些实际的特定查询。随着查询变得越来越复杂,不可能详尽地考虑每个可能的查询计划,这意味着即使有了完美的信息和完美的代码,优化器也可能没有时间去做您想做的所有事情。您需要查看为这两个查询生成的实际计划,以查看它们是否实际上相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句