查询性能INNER JOIN ON AND比较



我想知道在下面所述的两个查询之间,哪一个查询的性能最好,或者它们的性能相同吗?

第一个:[没有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子句,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

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

但是,如果您通过LEFT JOIN连接它们,那么这两个查询彼此不同,将产生不同的结果。

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

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

理论上,第一个查询很可能只是想将文本比较放在"where"中,然后加入表并集的"逻辑"定义,"where"仅用于指定在比较时变化的值其中t.name='Leads';关于

最新更新