考虑以下问题。
select * from contact where firstname like '%some%'
select * from
(select * from contact) as t1
where firstname like '%some%'
两个查询的执行计划相同并且同时执行。但是,我期望第二个查询将有一个不同的计划并执行得更慢,因为它必须从联系人中选择所有数据并应用过滤器。看起来我错了。
我想知道这是怎么回事?
数据库服务器:SQL Server 2005
答案 0 :(得分:6)
“查询优化器”正在发生。当您运行查询时,SQL Server使用基于成本的优化器来确定可能是满足该请求的最佳方式(即它的执行计划)。把它想象成从地方A到地方B的路线图。从A到B可能有很多不同的方法,有些会比其他方式更快。 SQL Server将使用不同的路径来实现返回满足查询的数据的最终目标,并使用具有可接受成本的数据。注意,它不一定能分析每种可能的方式,因为这会不必要地花费很多。
在您的情况下,优化器已经确定这两个查询可以折叠成相同的内容,因此您可以获得相同的计划。