添加内部查询不会更改执行计划

Nav*_*K N 2 sql performance sql-server-2005 sql-execution-plan

请考虑以下查询.

select * from contact where firstname like '%some%'

select * from 
    (select * from contact) as t1 
where firstname like '%some%'
Run Code Online (Sandbox Code Playgroud)

两个查询的执行计划相同并且同时执行.但是,我期望第二个查询将有一个不同的计划并执行得更慢,因为它必须从联系人中选择所有数据并应用过滤器.看起来我错了.

我想知道这是怎么回事?

数据库服务器:SQL Server 2005

Ada*_*Dev 6

"查询优化器"就是正在发生的事情.当您运行查询时,SQL Server使用基于成本的优化器来确定可能是满足该请求的最佳方式(即它的执行计划).把它想象成从地方A到地方B的路线图.从A到B可能有很多不同的方式,有些会比其他方式更快.SQL Server将使用不同的路径来实现返回满足查询的数据的最终目标,并使用具有可接受成本的数据.注意,它不一定分析每种可能的方式,因为这将是不必要的昂贵.

在您的情况下,优化器已经确定这两个查询可以折叠成同一个东西,因此您可以获得相同的计划.