关于性能的子查询VS连接

时间:2011-03-10 09:28:18

标签: sql

哪个性能更好[子查询]或[加入]?

我有3个彼此相关的表,我需要从一个表中选择一些表中的数据,这些表有一些与其他2个表相关的字段,从性能的角度来看,以下2个SQL语句中的一个更好:

select Table1.City, Table1.State, Table2.Name, Table1.Code, Table3.ClassName 
from Table1 inner join Table2 on Table1.EmpId = Table2.Id inner join Table3
on Table1.ClassId = Table3.Id where Table.Active = 1

OR

select City, State, (select Name from Table2 where Id = Table1.EmpId) as Name, Code,
(select ClassName from Table3 where Id = Table1.ClassId) as ClassName from Table1
where Active = 1

我已经尝试过执行计划但是它的统计数据对我来说并不具有表现力,因为当前的数据是一个测试数据而不是真实的数据,所以我无法想象表格生存时的数据量当然会超过测试一。

注意:表2和表3中的Id字段是主键

提前致谢

2 个答案:

答案 0 :(得分:1)

第一种方法,加入,速度要快得多。第二,将对每一行执行查询。有些数据库会将嵌套查询优化为连接。

Join vs. sub-query

答案 1 :(得分:0)

我经常使用子查询,如果我期望大表连接或很多连接。

特别是对于左连接,可能会发生查询超过连接缓存的大小。