Mysql 如果在join中进行筛选或在join后使用where子句进行筛选,哪个查询更快
比较这两个查询: 问题1Mysql 如果在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
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在逻辑上更为一致。您可以分析使用内部联接执行每个查询所需的时间,这两个查询应具有相同的执行计划,因此性能相同。