在 SQL-Server 2016(使用 Management Studio 2016)上,我创建了两个相同的存储过程:一个使用 SET QUOTED_IDENTIFIER OFF编译,另一个使用ON编译。
这是使用 ON 执行的查询计划,即时结果,我们可以看到使用了正确的索引搜索:
https://www.brentozar.com/pastetheplan/?id=S1ZNIpZ8z
然后这就是问题所在,使用 OFF 执行,索引扫描花费了 5 秒以上:
https://www.brentozar.com/pastetheplan/?id=SkCOUTWLf
以下是有罪索引的 DDL:
CREATE NONCLUSTERED INDEX [IX_CAB_NO_CAB_TYPE_CAB] ON [TraceTri].[CAB]
(
[NO_CAB] ASC,
[TYPE_CAB] ASC
)
CREATE NONCLUSTERED INDEX [IX_CAB_CHECKSUM] ON [TraceTri].[CAB]
(
[CHECKSUM] ASC
)
我不明白查询计划如何完全受此 SET 选项的影响,因为它似乎与应该执行的方式没有联系?