首页 > 解决方案 > 2条sql的SQL性能比较

问题描述

哪个查询在性能方面更好?

一个

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 = ***;

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

请解释一下哪个查询更好以及为什么。谢谢。

标签: sqlleft-join

解决方案


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

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


推荐阅读