【问题标题】:Adding inner query is not changing the execution plan添加内部查询不会改变执行计划
【发布时间】:2010-06-28 10:14:02
【问题描述】:

考虑以下查询。

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

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

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

我想知道这是怎么回事?

数据库服务器:SQL server 2005

【问题讨论】:

    标签: sql performance sql-server-2005 sql-execution-plan


    【解决方案1】:

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

    在你的例子中,优化器已经计算出这两个查询可以折叠成同一个东西,因此你得到了相同的计划。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2022-01-26
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2013-02-05
      • 1970-01-01
      相关资源
      最近更新 更多