症状
当你在 Microsoft SQL Server 2014 或2016中查询视图时,如果将其与 SQL Server 2008 R2 中的执行进行比较,可能会花费较长的时间来完成。
当执行使用 UNION ALL 和 row 目标(如 TOP N 子句、FAST N 或 EXISTS 谓语)的查询时,如果将其与 SQL Server 2008 R2 进行比较,你可能会注意到 SQL Server 2014 或更高版本中的查询运行速度较慢。
原因
在 SQL Server 2008 R2 中,如果有行目标,查询优化器将更改 "UNION ALL" 下不同部分的顺序,以便最便宜的部分最先开始。 这使查询能够在成本较低的部分生成所需的行数后继续执行,而无需继续执行更昂贵的部分。 此类重新排序在 SQL Server 的更高版本中不会发生。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
注意 必须为此问题启用查询 Optimiser。
有关查询优化器和跟踪标志的详细信息,请参阅以下链接:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语。