SQL执行计划中为什么是TOP操作

Art*_*yan 10 performance sql-server execution-plan sql-server-2012

搜索了一段时间后,我决定发布这个问题,因为找不到答案,如果有类似的问题/答案,我深表歉意。

在两个类似设置的 SQL 服务器上运行以下查询时,我们会遇到影响性能的不同执行计划,我们需要帮助找出原因。

查询:

SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284 
DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

服务器A的执行计划 服务器B

服务器B的执行计划 服务器B http://s2.postimg.org/z9fjrfv4n/server_B.png

您会注意到服务器 B 在实际执行计划中具有 TOP 物理操作,我们正在尝试找出原因。两个查询在索引查找中使用相同的索引。

以下是服务器 A 和服务器 B 的一些详细信息

服务器 A 和 B 都是

Windows Server 2008 R2 标准服务包 1

24GB 内存

64位操作系统

使用 ( SELECT SERVERPROPERTY('ProductVersion') )获得的SQL Server 2012版本

服务器A SQL 版本11.0.3000.0

服务器B SQL 版本11.0.5058.0

我们尝试过的

  1. 清除程序缓存
  2. 重建索引
  3. 刷新统计
  4. 设置行数 0 使用 rowcount 并开始

为什么服务器B在执行计划中有TOP?在这个简单的查询示例中,没有真正的问题,但在更大的查询中,TOP 的成本上升,我们看到性能受到影响。任何帮助调试这将不胜感激,我们可以为您提供您可能需要帮助的任何其他信息。

Dan*_*man 12

检查以确保两台服务器上的数据库兼容性级别相同。我在 SQL Server 2012 实例上运行了一个快速测试,如果兼容级别为 100 或更低,则看到引入了 TOP 运算符。除非有特殊原因,否则最好在 SQL Server 2012 实例上使用 110 (SQL Server 2012) 兼容性级别。