小编Ada*_* K.的帖子

SQL Server 2008r2、2017 和 2019 之间的查询执行异常

我有一个非常基本的查询,它在 SQL Server 2008r2 上使用索引搜索完全正常运行。当我们迁移到 SQL Server 2017 时,它的性能开始变得更糟,现在对查询中的 Remote_Records 进行聚集索引扫描,它以前从未出现过问题,从而导致我们的其余查询运行一分钟或更长时间,依赖于该函数应用于多少条记录。在我们升级之前,这仅在几秒钟内运行。将其切换回使用旧的 Cardinality Estimator 将计划改回来,但这是我们希望避免的选项。

我还针对 SQL Server 2019 对其进行了测试,它返回到与 SQL 2008r2 相同类型的计划,除了 Local_Record_Additional_Data 上的聚集索引查找现在在 RowStore 处理中使用批处理模式来获取查找。

我可以通过在 SQL 2017 中的查询上使用 TOP 1 来使查询不在 Remote_Records 上使用聚集索引扫描,但是由于这在 SQL 2008r2 中没有任何额外的修改,我有点不知所措,为什么基数估计器在这种情况下是关闭的。

此查询是更大的内联表值函数的一部分,该函数应用于给定的 id 值以收集我们想要显示的某些数据。这是函数中唯一有问题的部分。

任何意见,将不胜感激。

以下是执行计划链接: 原始 SQL 2008r2 计划:https ://www.brentozar.com/pastetheplan/ ? id = S1G4pnK2H

原始 SQL 2017 计划:https : //www.brentozar.com/pastetheplan/?id=B1ALKXQ2S

带有 TF 9481 的 SQL 2017:https ://www.brentozar.com/pastetheplan/ ? id = ByguM2Y2S

Microsoft 尚未发布 SQL 2019 的 DTD,我已包含以下 SQL 2019 …

performance sql-server sql-server-2017 query-performance

5
推荐指数
1
解决办法
132
查看次数