Sql 内部联接上的查询性能和比较

Sql 内部联接上的查询性能和比较,sql,performance,join,Sql,Performance,Join,我想知道以下两个查询之间哪一个性能最好,或者它们的性能相同 第一个:[无WHERE子句,just AND with 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.rela

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

第一个:[无WHERE子句,just AND with 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
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
选择相关选项卡作为选项卡、标签、t.name
来自相关列表
内连接选项卡t
关于t.tabid=r.tabid
和t.name='Leads'
r.is_active=1,r.related_tabid为0
t.is_active=1
按标签订购
第二个:[使用WHERE子句,并与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
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
选择相关选项卡作为选项卡、标签、t.name
来自相关列表
内连接选项卡t
关于t.tabid=r.tabid
其中t.name='Leads'
r.is_active=1,r.related_tabid为0
t.is_active=1
按标签订购

两个查询都是相同的,因为使用的联接是
内部联接<代码>内部联接
基本上它只过滤在另一个表上至少有匹配项的行。即使这两个表是互换的,结果仍然是一样的


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

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


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

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

谢谢您的回复。如果我使用
LEFT JOIN
哪一个性能更快?这是回答您问题的好文章: