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