关于mysql:连接sql查询中where和and子句的区别

Difference between where and and clause in join sql query

本问题已经有最佳答案,请猛点这里访问。

下面两个SQL查询有什么区别

1
2
3
4
select a.id, a.name, a.country
from table a
left join table b on a.id = b.id
where a.name is not null

1
2
3
select a.id, a.name, a.country
from table a
left join table b on a.id = b.id and a.name is not null


根据以下两个测试结果

1
2
3
select a.id, a.name,a.country from table a left join table b
on a.id = b.id
where a.name is not null

速度更快(237比460)。据我所知,这是一个标准。

enter image description here

氧化镁


除了语法之外没有别的区别。


  • 执行联接,然后执行筛选器
  • 在联接前执行筛选器(更好的性能)
  • 编辑:上面是我的原始答案,下面支持它。

    4个表,4个左联接,大约500000个结果,第二个查询在一半时间内运行。在测试查询效率时,您应该选择更大的工作集…或是CPU负载、RAM使用、连接时间等因素。如果您的记录少于1000条,或者流量优化有限,则很难看到或证明这一点。在生产环境中测试您的工作集并使用性能更好的东西(不仅仅是理论上的)很简单。

    网址:http://www.beaudurant.com/images/sof/22302649.jpg

    您可以看到我的数据集在效率和结果上的差异。此示例使用的是MySQL数据库。

  • 452734记录420.016秒
  • 452747记录在214.334秒内
  • 注意:查询是故意运行缓慢的。