我一直在思考这两个陈述中哪一个可能有更高的表现(及其原因)的问题:
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'
一个表单包含多个表单元素,一个表单元素始终是一个表单的一部分。
谢谢,
丹尼斯
答案 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就此提出了很多很好的建议。)