我有一个非常简单的查询:
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对同一数据库执行完全相同的查询时,将不使用索引。
相反,查询计划在表的主键上使用聚簇索引。
这可以在查询存储中看到。
其他信息:作业是在其他帐户下执行的。
对此行为有合理的解释吗?
那我很想听听它:-)
答案 0 :(得分:0)
找到原因。
SQL作业代理默认将“ QUOTED_IDENTIFIER”设置为“ OFF”。
执行“ SET QUOTED_IDENTIFIER ON”将使该语句使用预期的执行计划
但是我仍然不知道为什么会这样。