SQL Server性能 - Subselect或Inner Join?

时间:2011-04-29 11:48:34

标签: sql-server inner-join subquery

我一直在思考这两个陈述中哪一个可能有更高的表现(及其原因)的问题:

select * from formelement 
where formid = (select id from form where name = 'Test')

select * 
from formelement fe 
inner join form f on fe.formid = f.id 
where f.name = 'Test'

一个表单包含多个表单元素,一个表单元素始终是一个表单的一部分。

谢谢,

丹尼斯

2 个答案:

答案 0 :(得分:3)

查看执行计划,如果将连接添加到连接中,则很可能会相同,即连接将返回两个表中的所有内容,in中不会

我实际上更喜欢EXISTS而不是那两个

select * from formelement  fe
where exists (select 1 from form f 
                 where f.name='Test' 
                 and fe.formid =f.id)

答案 1 :(得分:1)

性能取决于SQL Server引擎选择的查询计划。查询计划取决于很多因素,包括(但不限于)SQL,确切的表结构,表的统计信息,可用索引等。

由于您的两个查询非常简单,我的猜测是它们会产生相同(或非常相似)的执行计划,从而产生相当的性能。

(对于大型,复杂的查询,SQL 的确切措辞可以有所作为,Dan Tow的书SQL Tuning就此提出了很多很好的建议。)