【发布时间】:2014-05-13 10:22:41
【问题描述】:
我有一个这样的存储过程:
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))
在这个存储过程的最后......如果我添加这个,我的执行性能会提高吗?这段代码有什么用?在这个存储过程中我必须做的其他优化是什么?
感谢任何帮助!
这是我的查询执行计划
【问题讨论】:
-
速度慢的原因可能有很多。显示您的架构和执行计划将有助于人们诊断问题,否则这里没有足够的信息来提供答案
-
我要采取存储过程执行计划或者这个sql查询执行计划
-
两者都会执行相同的查询
-
好的,,,我将使用查询执行计划编辑我的问题
-
先生,我用查询执行计划编辑了我的问题..
标签: sql-server stored-procedures sql-server-performance