两个SQL的SQL性能比较

两个SQL的SQL性能比较,sql,left-join,Sql,Left Join,哪个查询在性能方面更好 A. B 基本上,我认为A更好。(但如果sql server正在显著优化查询) 请告诉我哪个查询更好,为什么。谢谢。几乎所有数据库优化器都会忽略子查询。为什么?SQL查询描述生成的结果集,而不是处理它的步骤。SQL优化器生成运行的底层代码 大多数优化器都足够聪明,可以忽略子查询,选择最优的索引、分区和算法,而不管它们是什么。一个例外是MySQL/MariaDB的某些版本倾向于具体化子查询——这是一个性能杀手。我认为,即使在较新的版本中,这一点也有所改进。答案在很大程度上取

哪个查询在性能方面更好

A. B 基本上,我认为A更好。(但如果sql server正在显著优化查询)


请告诉我哪个查询更好,为什么。谢谢。

几乎所有数据库优化器都会忽略子查询。为什么?SQL查询描述生成的结果集,而不是处理它的步骤。SQL优化器生成运行的底层代码


大多数优化器都足够聪明,可以忽略子查询,选择最优的索引、分区和算法,而不管它们是什么。一个例外是MySQL/MariaDB的某些版本倾向于具体化子查询——这是一个性能杀手。我认为,即使在较新的版本中,这一点也有所改进。

答案在很大程度上取决于数据库引擎。您使用的是哪一个?我删除了不兼容的数据库标记。@LeadDeveloper哪个版本的PostgreSQL?11和12之间有重要的区别。@LeadDeveloper然后选择选项B。查询A限制优化器可以达到的选项,而查询B打开更多的可能性。请记住,子查询可能是优化障碍,这取决于优化器的智能程度。@LeadDeveloper:检查,您就会知道。我很确定这两种方法的执行计划基本相同。
select users.email
from (select * from purchases where id = ***) A 
left join users on A.user_id = users.id;
select users.email 
from purchases A 
left join users on A.user_id = users.id where A.id = ***;