在这种情况下,执行SQL的最佳选择是什么

时间:2014-04-08 21:01:25

标签: mysql sql

我有这个SQL语句:
SELECT aps.*,(SELECT name FROM brands WHERE id=aps.brand) as brand FROM applications as aps

另一个:
SELECT aps.*,brd.name as brand FROM applications as aps INNER JOIN brands as brd ON aps.brand=brd.id


两者的查询结果相同,所以我猜测两者之间没有任何区别。但优化呢?

2 个答案:

答案 0 :(得分:1)

对于第一个查询,SQL Server将为每个记录执行子查询以获取要显示的正确值(名称),但在使用join语句的第二个查询中,您将使用数据库的性能获得优化结果发动机。 (如果你的表中有很多数据,你会注意到一个非常大的区别)。我建议使用JOIN语句并在使用的列中创建索引。

祝你好运

答案 1 :(得分:0)

查询不等效,如果aps.brandid表中的brands值不匹配,或aps.brandINNER JOIN,则它们会产生不同的结果空值。如果您在第二个查询中将LEFT OUTER JOIN更改为JOIN,则它们将是等效的。

如何优化查询是查询优化器的决定,并且不熟悉查询优化器内部的任何人都无法猜测将会发生什么。如果您关注优化路径,大多数SQL引擎都有一个EXPLAIN功能,可以准确地告诉您如何计划和执行查询。

我认为可以说99%或更多的SQL程序员更喜欢使用{{1}}而不是内部相关查询的版本,即使优化程序以完全相同的方式计划它们。