在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选项的影响,因为它似乎与它应该执行的方式没有关联?