从 SQL 作业代理执行时具有不同执行计划的简单查询

Simple query with different execution plan when executed from SQL Job agent

我有这个非常简单的查询:

IF EXISTS (SELECT 1 FROM system.RawEvent_pool1 WHERE ProcessedDate IS NULL)
EXECUTE [system].[usp_ProcessAuditData] '1'

我在系统上有一个过滤索引。RawEvent_pool1。

它是在 ProcessedDate IS NULL 上过滤的 (ProcessedDate 包含在索引中)

因此索引应该与此查询完美匹配。

从实际执行计划中,我可以看出,当从 Management Studio 执行时,索引按预期使用。

但是当从 SQL 作业代理对同一数据库执行完全相同的查询时,不会使用索引。

相反,查询计划在 table 的主键上使用聚簇索引。

我可以在查询存储中看到这个。

附加信息:作业在不同的帐户下执行。

对于这种行为有什么合乎逻辑的解释吗?

那我很想听听:-)​​

找到原因了。

SQL 作业代理已将 'QUOTED_IDENTIFIER' 默认设置为 'OFF'。

执行'SET QUOTED_IDENTIFIER ON'将使语句使用预期的执行计划

但我仍然不知道为什么会这样。