【问题标题】:which query is faster if filter is done in join or using a where clause after join [duplicate]如果在连接中完成过滤或在连接后使用 where 子句,哪个查询更快[重复]
【发布时间】:2015-03-17 11:48:43
【问题描述】:

比较这两个查询:....

查询 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

【问题讨论】:

标签: mysql sql


【解决方案1】:

没关系,两种情况都应该执行同样的事情。

我个人更喜欢仅在 ON 子句中的连接条件和在 WHERE 子句中的“过滤”。

【讨论】:

  • 是因为数据库计划了查询的执行对吧? (使用关系代数)
  • 但我认为是这样,前一个查询不会返回除 1 以外的 a.id 的任何实际匹配项,因此后一个语法(带 WHERE)在逻辑上更一致。
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多