【发布时间】:2018-02-12 17:21:36
【问题描述】:
我有以下存储过程
CREATE PROCEDURE my_proc
(
@Person VARCHAR(50)
)
AS
SELECT updatedBy
FROM MyTable t
WHERE updatedBy = @Person AND updatedDate > DATEADD(day,-1,GETDATE()) OR
@CompletedBy IS NULL
最后一行 (OR @CompletedBy IS NULL) 确保如果不传递任何参数,将显示所有记录。但是,查看执行计划,即使在提供参数的情况下,这也会在调用过程时导致聚集索引扫描。
如果我取出 OR,则查询使用索引查找。
有没有一种方法可以让我保持捕获所有行为而不导致索引扫描?
【问题讨论】:
标签: sql performance sql-server-2016