Sql server 连接中的Where子句与子查询中的Where子句 DDL DML 查询-1 查询1 SQL探查器结果

Sql server 连接中的Where子句与子查询中的Where子句 DDL DML 查询-1 查询1 SQL探查器结果,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,读取=>56,持续时间=>4 查询-2 查询2 SQL探查器结果 读取=>262,持续时间=>2 你也可以看到我的 查询-应该使用哪个查询以及为什么使用?优化器为两个查询生成相同的执行计划,总成本相同。通过选中SSMS中的“包含实际执行计划”选项,然后查看图形执行计划中显示的每个查询的第一个元素的估计子树成本,可以查看成本度量。您还可以通过使用SET STATISTICS time ON和SET STATISTICS IO ON启用时间度量和IO读取度量来比较它们。进行多次测试,取最佳平均结果进

读取=>56,持续时间=>4

查询-2 查询2 SQL探查器结果 读取=>262,持续时间=>2

你也可以看到我的


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

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

+1对于单个问题的这么多建议。我的最后一个问题,哪个问题更适合你?为什么?如果性能证明是一样的,我会选择可读性更高、更易于维护的查询。如果您想要一个返回与上述查询相同结果的不正确查询示例,请尝试选择t.*,从t1中选择t1.id,其中t1.id=t.id,从t1中选择t1.nam,其中t1.id=t.id-nam,从t中选择t.id=1,这将生成更复杂的查询计划,并且成本更高。
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
Select T1.*, K.* from 
(
    Select id, nam from t Where id = 1
)K
Inner Join t1 T1 on T1.id = K.id