【问题标题】:execution of stored procedure taking long time when ever returning row count hig返回行数高时执行存储过程需要很长时间
【发布时间】: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


【解决方案1】:

“优化”的想法并非没有道理。
这个想法是告诉数据库引擎在制定执行计划时不要假设与此 proc 一起使用的第一个日期值是典型的。

但是您的执行计划非常简单,只有一张表,我希望这个提示可能不是答案。

执行计划显示了两件事。

首先,最慢的是排序 == 您的排序依据。 排序总是很慢并且不能很好地扩展。 如果您真的不需要它,删除 Order By 将产生最大的影响。 如果您确实需要 Order By,消除排序的唯一方法是在 Order By 列上添加索引...并使用它。
与任何索引决策一样,您必须权衡添加它的利弊。

这导致了另一个操作 - 键查找。
您有两个步骤来提取数据,索引查找,然后是您想要的所有列的键查找。 您可以通过使索引包含所有需要的列(或创建新的索引)来消除键查找。 同样,您应该权衡系统中索引更改的利弊。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-07-10
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多