Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Mysql 如果在join中进行筛选或在join后使用where子句进行筛选,哪个查询更快_Mysql_Sql - Fatal编程技术网

Mysql 如果在join中进行筛选或在join后使用where子句进行筛选,哪个查询更快

Mysql 如果在join中进行筛选或在join后使用where子句进行筛选,哪个查询更快,mysql,sql,Mysql,Sql,比较这两个查询: 问题1 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1 /* <-- Filter here? */ 问题2 SELECT * FROM TableA a

比较这两个查询:

问题1

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
WHERE       a.ID = 1            /* <-- Filter here? */
问题2

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
        AND a.ID = 1            /* <-- Or filter here? */
INNER JOIN  TableB b
        ON  x.TableBID = b.ID

没关系,两种情况下都应该执行相同的操作


就我个人而言,我只喜欢在ON子句中使用连接条件,而在WHERE子句中使用过滤条件。

这是因为数据库计划执行查询,对吗?使用关系代数但我认为是这样,前一个查询不会返回除1以外的任何实际匹配的a.id,因此后一个语法与WHERE在逻辑上更为一致。您可以分析使用内部联接执行每个查询所需的时间,这两个查询应具有相同的执行计划,因此性能相同。