从SQL Job Agent执行时,具有不同执行计划的简单查询

时间:2018-12-21 10:50:55

标签: sql-server sql-execution-plan

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

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

我在system.RawEvent_pool1上有一个经过筛选的索引。

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

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

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

但是,当从SQL Job Agent对同一数据库执行完全相同的查询时,将不使用索引。

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

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

其他信息:作业是在其他帐户下执行的。

对此行为有合理的解释吗?

那我很想听听它:-)

1 个答案:

答案 0 :(得分:0)

找到原因。

SQL作业代理默认将“ QUOTED_IDENTIFIER”设置为“ OFF”。

执行“ SET QUOTED_IDENTIFIER ON”将使该语句使用预期的执行计划

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