摘要
Microsoft SQL Server 2016 中的某些查询执行计划包括一种在表或索引扫描/区域操作上评估筛选器的模式。 筛选器谓词的某些部分可能匹配索引键,因此可能用于运行索引查找或范围扫描。 该谓语的其余部分称为 残留,并且必须通过扫描或区域操作对每个行输出进行评估。 这对应于一个筛选器运算符。 但是,为了提高性能,SQL Server 可以将筛选器推送到 table access 运算符本身。虽然此方法提高了整体性能,但在某些条件下(例如,对于与参数敏感性相关的基数估计不准确),下面的 "扫描" 筛选器可能会处理比预期更多的行。 使用实际执行计划时,在查询性能故障排除过程中可能会隐藏此行为,因为返回的行数对应于应用驻留谓语后的行数,而不是从表或索引中扫描的实际行数。
更新信息
为了改进 "症状" 部分中所述方案的诊断,SQL Server 2016 Service Pack 1 (SP1)引入了新的 "显示计划" XML 属性,估计行已读。 此属性提供在应用剩余谓词之前将由运算符读取的行的估计计数。 此更新是对知识库3107397的补充。此功能包含在 SQL Server 2016 的 Service Pack 1 中。
SQL Server 2016 的每个新版本都包含上一版本中包含的所有修补程序和所有安全修补程序。 我们建议你安装 SQL Server 2016 的最新版本。
参考
了解 Microsoft 用于描述软件更新的 术语。