与WHERE子句相反,在连接中是否有任何参数可以在性能方面进行过滤?
例如,
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
AND b.deleted = 0
WHERE a.field = 5而不是
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
WHERE a.field = 5
AND b.deleted = 0我个人更喜欢后者,因为我觉得过滤应该在过滤部分(WHERE)中完成,但是有没有任何性能或其他原因来做这两种方法?
发布于 2011-02-09 11:14:59
如果查询优化器完成了它的工作,那么内部连接的两种形式根本没有区别(除了其他形式的清晰度)。
也就是说,with left joins在join中有一个条件,用于在连接之前过滤掉第二个表中的行。where中的条件表示在联接后从最终结果中筛选出行。这意味着非常不同的事情。
发布于 2011-02-10 04:41:15
不,这两者之间没有区别,因为在查询的逻辑处理中,WHERE总是紧跟在filter子句(ON)之后,在您的示例中,您将看到:
您的示例使用ANSI SQL-92标准,您也可以使用ANSI SQL-89标准编写查询,如下所示:
SELECT blah FROM TableA a,TableB b
WHERE b.id = a.id AND b.deleted = 0 AND a.field = 5对于内部连接是这样的,外部连接类似,但不是相同的
发布于 2011-02-10 05:34:20
使用内部连接,您将获得相同的结果,并且可能具有相同的性能。但是,使用外部连接时,两个查询将返回不同的结果,并且根本不等价,因为将条件放在where子句中实际上会将查询从左连接更改为内连接(除非您正在查找某些字段为空的记录)。
https://stackoverflow.com/questions/4940926
复制相似问题