我想知道在下面所述的两个查询之间,哪一个查询的性能最好,或者它们的性能相同吗?
第一个:[没有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 JOIN
。INNER JOIN
基本上只过滤在另一个表上至少匹配的行。即使这两个表是交换的,结果仍然是一样的。
但是,如果您通过LEFT JOIN
连接它们,那么这两个查询彼此不同,将产生不同的结果。
在我看来,这两个查询之间的唯一区别是一个在WHERE子句中有t.name = 'Leads'
,另一个在JOIN子句中有。对的
两者之间没有区别。SQL优化器将以相同的方式处理这两个问题。对它们中的每一个进行解释以进行验证。
理论上,第一个查询很可能只是想将文本比较放在"where"中,然后加入表并集的"逻辑"定义,"where"仅用于指定在比较时变化的值其中t.name='Leads';关于