Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有筛选条件的SQL联接查询:性能_Sql_Oracle11g - Fatal编程技术网

具有筛选条件的SQL联接查询:性能

具有筛选条件的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';

我想连接几个表,但要从“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 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)