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

时间:2010-06-28 10:14:02

标签: 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%'

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

我想知道这是怎么回事?

数据库服务器:SQL Server 2005

1 个答案:

答案 0 :(得分:6)

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

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