具有筛选条件的SQL联接查询:性能
我想连接几个表,但要从“a”表中筛选特定类型。以下两个查询中哪一个查询更好(有更好的方法吗?),还是查询优化器没有差异 当“WHERE”子句中给出了过滤条件时:具有筛选条件的SQL联接查询:性能,sql,oracle11g,Sql,Oracle11g,我想连接几个表,但要从“a”表中筛选特定类型。以下两个查询中哪一个查询更好(有更好的方法吗?),还是查询优化器没有差异 当“WHERE”子句中给出了过滤条件时: SELECT .. FROM A a JOIN B b ON a.id=b.id JOIN C c on a.id = c.id...<other joins>...WHERE a.col='SOME_VAL'; 选择。。从A连接B在A.id=B.id连接C在A.id=C.id……其中A.col='SOME_VAL';
SELECT .. FROM A a JOIN B b ON a.id=b.id JOIN C c on a.id = c.id...<other joins>...WHERE a.col='SOME_VAL';
选择。。从A连接B在A.id=B.id连接C在A.id=C.id……其中A.col='SOME_VAL';
过滤条件在“开”中给出:
SELECT .. FROM A a JOIN B b ON a.id=b.id AND a.col='SOME_VAL' JOIN C c on a.id = c.id...<other joins>
选择。。从A.id=B.id上的A连接B和A.col='SOME_VAL'连接A.id=C.id上的C。。。
对于内部联接,不会产生性能差异,您可以使用EXPLAIN进行检查(两种形式的查询应该产生相同的计划)
使用WHERE子句的好处通常是可读性。与多行布局组合时。(我强烈建议不要将所有SQL作为一条长线保存。)
它变得更易于读取(和维护)的原因是连接谓词现在只明确描述表之间的关系。查询在没有WHERE子句的情况下仍能正确运行,但会返回一个更大的集合
SELECT
stuff
FROM
foo
INNER JOIN
bar
ON (join predicates here)
WHERE
(static filters here)