2

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 分析器结果

读取 => 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 Profiler 结果

读取 => 262 和持续时间 => 2

你也可以看看我的SQlFiddle

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

4

1 回答 1

1

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

于 2012-07-01T09:37:13.567 回答