我有一个这样的存储过程:
ALTER procedure [dbo].[IBS_fetchreleasedinpodiumgridnew]
@locid INTEGER = NULL
AS BEGIN
SET NOCOUNT ON
DECLARE @TodayMinus7Days DATETIME
SET @TodayMinus7Days = getdate()-7
SELECT
t.TBarcode, t.PlateNo, t.DelEcode,
cast(t.Paydate as Time) [REQ],
datediff(MINUTE, t.PayDate,
CASE t.Status
WHEN 3 THEN GETDATE()
WHEN 4 THEN t.KeyRoomDate
WHEN 5 THEN t.KeyRoomDate
END) as KRRT,
datediff(MINUTE, t.PayDate,
CASE t.Status
WHEN 3 THEN GETDATE()
WHEN 4 THEN GETDATE()
WHEN 5 THEN t.DelDate
END) as DT
FROM
dbo.Transaction_tbl t
WHERE
(([status] IN (3,4))
OR
([status] = 5 AND DATEDIFF(n, DelDate, GETDATE()) <= 3)
)
AND locid = 6
AND dtime >= @TodayMinus7Days
ORDER BY
paydate
end
我在列上有一个非聚集索引Locid, dtime
。
我的表有超过 4 条缺失记录.. 每当返回超过 25 行时,这需要很长时间才能执行(有时 30 秒,有时 45 秒)。为什么会这样?如何更快地执行我的存储过程?
有人建议添加此代码
OPTION (OPTIMIZE FOR (@TodayMinus7Days UNKNOWN))
在这个存储过程的最后......如果我添加这个我的执行性能会提高吗?这段代码有什么用?在这个存储过程中我必须做的其他优化是什么?
任何帮助表示赞赏!
这是我的查询执行计划