23

我想知道以下两个查询之间的性能最好的是哪一个,或者它们的性能是否相同?

第一个:[没有 WHERE 子句,只有 AND 和 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 子句,与 where 而不是 ON 关联的 AND ]

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
4

3 回答 3

16

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

但是,如果您通过 加入它们LEFT JOIN,则这两个查询彼此不同,并且会产生不同的结果。

于 2013-03-27T09:09:00.167 回答
3

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

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

于 2013-09-08T05:24:18.007 回答
1

理论上,第一个查询只是想将文本比较放在“where”中,然后加入表联合的“逻辑”的定义中,而“where”仅用于指定比较时变化的值其中 t.name = 'Leads'; 问候

于 2014-12-02T23:07:38.320 回答