一尘不染

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

sql

考虑以下查询。

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

select * from 
    (select * from contact) as t1 
where firstname like '%some%'

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

我想知道这是怎么回事?

数据库服务器:SQL Server 2005


阅读 158

收藏
2021-03-08

共1个答案

一尘不染

正在发生“查询优化器”。当您运行查询时,SQL
Server使用基于成本的优化器来确定最有可能满足该请求(即执行计划)的最佳方法。将其视为从位置A到位置B的路线图。从A到B的到达方法可能有很多,有些方法会比其他方法更快。SQL
Server将采用不同的途径来实现最终目标,即返回满足查询条件的数据,并采用成本可接受的方法。请注意,它并不一定要以所有可能的方式进行分析,因为这样做不必要地昂贵。

在您的情况下,优化器已经得出结论,可以将这两个查询折叠为同一事物,因此您将获得相同的计划。

2021-03-08