连接中的Where子句与Sub Query中的Where子句

时间:2012-07-01 09:13:25

标签: sql-server sql-server-2008 sql-server-2005

DDL

create table t
(
    id int Identity(1,1),
    nam varchar(100)
)


create table t1
(
    id int Identity(1,1),
    nam varchar(100)
)

DML

Insert into t( nam)values( 'a')
Insert into t( nam)values( 'b')
Insert into t( nam)values( 'c')
Insert into t( nam)values( 'd')
Insert into t( nam)values( 'e')
Insert into t( nam)values( 'f')


Insert into t1( nam)values( 'aa')
Insert into t1( nam)values( 'bb')
Insert into t1( nam)values( 'cc')
Insert into t1( nam)values( 'dd')
Insert into t1( nam)values( 'ee')
Insert into t1( nam)values( 'ff')

查询 - 1

Select t.*, t1.* From t t
Inner join t1 t1 on t.id = t1.id
Where t.id = 1

查询1 SQL事件探查器结果

Reads => 56,持续时间=> 4

查询 - 2

Select T1.*, K.* from 
(
    Select id, nam from t Where id = 1
)K
Inner Join t1 T1 on T1.id = K.id

查询2 SQL事件探查器结果

Reads => 262和持续时间=> 2

您还可以看到我的 SQlFiddle

查询 - 应该使用哪个查询以及为什么?

1 个答案:

答案 0 :(得分:1)

优化程序为两个查询生成相同的执行计划,总成本相同。您可以通过选中SSMS中的“包括实际执行计划”选项查看成本度量标准,然后查看图形执行计划中显示的每个查询的第一个元素的“估计子树成本”。您还可以使用SET STATISTICS TIME ON和SET STATISTICS IO ON来比较时间度量和IO读取度量。多次进行测试并取最佳平均结果进行比较。如果测试表现出相同的性能,我会采用更易读且更易于维护的查询。