motoDrizzt Asked: 2018-07-31 03:28:24 +0800 CST2018-07-31 03:28:24 +0800 CST 2018-07-31 03:28:24 +0800 CST Sql Server 计划 - 什么是索引操作后的过滤器? 772 我在优化 SP 时遇到过这种情况,执行计划的一部分我真的没有得到:SQL Server 执行索引扫描,然后过滤结果。SQL Server 这样做而不是在索引扫描中全部执行的原因是什么? 例如: 该索引已包含WHERE使用的所有字段。我扩展了Index Scan操作,它执行了包含一些参数的 where 的一部分(完全符合预期)。然后我展开并检查了Filter操作,它所做的是对已经由Index Scan评估的几个日期时间字段应用一些其他过滤,以及对其他一些 SP 参数的一些其他条件。 这里发生了什么?我显然不关心我的具体查询,这不是重点,我试图了解什么条件会导致这种情况发生。 execution-plan sql-server-2016 1 个回答 Voted Best Answer Erik Darling 2018-08-03T04:57:36+08:002018-08-03T04:57:36+08:00 过滤器运算符通常用于非 SARGable 谓词,或者当谓词太复杂而无法有效地推送到索引访问操作时。 就您而言,我敢打赌这是一系列可选谓词。这些不是 SARGable:Conor vs. Optional Parameters。 ...加上一些其他 SP 参数的其他条件... 如果您的代码正在执行类似 的col = @var or @var IS NULL操作,则它属于该类别,并且可能会导致筛选器运算符。
过滤器运算符通常用于非 SARGable 谓词,或者当谓词太复杂而无法有效地推送到索引访问操作时。
就您而言,我敢打赌这是一系列可选谓词。这些不是 SARGable:Conor vs. Optional Parameters。
如果您的代码正在执行类似 的
col = @var or @var IS NULL
操作,则它属于该类别,并且可能会导致筛选器运算符。