2014-04-08 132 views
-1

我有这样的SQL sentense最好的选择:
SELECT aps.*,(SELECT name FROM brands WHERE id=aps.brand) as brand FROM applications as aps什么是做一个SQL在这种情况下

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


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

+0

使用'解释你query'在mysql中,这将告诉ü更多.. –

+0

带索引的加入比你的合作有关的查询更好,助相关子查询将运行forech相关记录 –

回答

1

对于第一个查询,SQL Server将执行子查询的每个记录,让你想显示(名字)正确的价值,但在使用连接语句中的第二个查询,你会得到使用的性能的优化结果数据库引擎。 (如果表中有很多数据,你会发现非常大的差异)。我推荐使用JOIN语句并在使用的列中创建索引。

好运

0

的查询是不等价的,它们将产生的情况下不同的结果,其中aps.brand不会在brands表匹配id值或其中aps.brand是NULL。如果您在第二个查询中将INNER JOIN更改为LEFT OUTER JOIN,它们将是等效的。

如何查询将优化为查询优化器的决定,没有人谁不是非常熟悉的查询优化器的内部是在一个位置,猜测会发生什么。如果你关心优化路径,大多数SQL引擎都有一个EXPLAIN特性,它将告诉你如何计划和执行查询。

我认为可以公平地说,99%或更多的SQL程序员宁愿使用JOIN而不是内部相关查询的版本,即使优化器计划的方式完全相同。

相关问题