create table t
(
id int Identity(1,1),
nam varchar(100)
)
create table t1
(
id int Identity(1,1),
nam varchar(100)
)
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')
Select t.*, t1.* From t t
Inner join t1 t1 on t.id = t1.id
Where t.id = 1
Reads => 56,持续时间=> 4
Select T1.*, K.* from
(
Select id, nam from t Where id = 1
)K
Inner Join t1 T1 on T1.id = K.id
Reads => 262和持续时间=> 2
您还可以看到我的 SQlFiddle
查询 - 应该使用哪个查询以及为什么?
答案 0 :(得分:1)
优化程序为两个查询生成相同的执行计划,总成本相同。您可以通过选中SSMS中的“包括实际执行计划”选项查看成本度量标准,然后查看图形执行计划中显示的每个查询的第一个元素的“估计子树成本”。您还可以使用SET STATISTICS TIME ON和SET STATISTICS IO ON来比较时间度量和IO读取度量。多次进行测试并取最佳平均结果进行比较。如果测试表现出相同的性能,我会采用更易读且更易于维护的查询。