症状
假设你运行涉及联接或聚合的查询 在由单列和多列覆盖的列上 统计信息(此列不是前导列)。 如果您使用的是 默认基数预估器(CE)在 SQL Server 2016 中,它可能会低估号码 不同的行。 这将导致子优化查询执行计划(例如:较低估计可能导致哈希运算符的内存不足,从而导致查询溢出到 tempdb)。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
注意 为了使此修补程序生效,你必须使用跟踪标记(TF)4199或相应的数据库范围配置或查询提示选项启用查询优化程序修补程序。
关于 SQL Server 的累积更新:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
可通过添加以下查询提示修复此问题:
用法 提示("FORCE_LEGACY_CARDINALITY_ESTIMATION")
参考
了解Microsoft 用于描述软件更新的术语 。