查询性能INNER JOIN ON和比较

时间:2013-03-27 09:06:47

标签: sql performance join

我想知道下面列出的2个查询之间的性能最佳,或者它们的表现相同吗?

第一个:[没有WHERE子句,只有和ON]

SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t 
       ON t.tabid = r.tabid
          AND t.name = 'Leads'
          AND r.is_active=1  and r.related_tabid <> 0
          AND t.is_active=1
  ORDER BY label

第二个:[使用WHERE子句,AND与where相关而不是ON]

SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t 
       ON t.tabid = r.tabid
       WHERE t.name = 'Leads'
             AND r.is_active=1  and r.related_tabid <> 0
             AND t.is_active=1
  ORDER BY label

3 个答案:

答案 0 :(得分:10)

两个查询都是相同的,因为使用的连接是INNER JOININNER JOIN基本上它只过滤在另一个表上至少匹配的行。即使这两个表是交换的,结果仍然是相同的。

但是如果你通过LEFT JOIN加入它们,那么这两个查询会有所不同,会产生不同的结果。

答案 1 :(得分:2)

在我看来,两个查询之间的唯一区别是一个在WHERE子句中有t.name = 'Leads',而在JOIN子句中有一个。{正确的吗?

两者之间没有区别。 SQL优化器将以相同的方式处理它们。对每个进行解析以验证。

答案 2 :(得分:0)

理论上,第一个查询只是想在'where'中放置文本比较,然后加入表的union的'logic'定义,'where'仅用于指定值比较时会有所不同 其中t.name ='Leads'; 问候