存储过程每两天变慢

时间:2016-08-02 12:56:15

标签: sql sql-server database stored-procedures

我在SQL Server上面临一个问题,我的存储过程在几天之后会变慢。

以下是我的存储过程示例。

这可能是服务器端的缓存问题吗?我可以增加服务器的缓存大小来解决问题吗?

通常,存储过程会在一秒钟内返回数据。

@START_VALUE int=null,
    @END_VALUE int=null
    @UID NVARCHAR(MAX)=null,
    AS
    BEGIN

  SELECT
    dbo.TABLE1.ID, 
    ROW_NUMBER()  OVER (ORDER BY TABLE1.UPDATED_ON desc) AS RN,   
    CONVERT(VARCHAR(10), dbo.TABLE1.DATE, 101) AS TDATE,
    CATEGORY = (
            SELECT TOP 1 COLUMN1
            FROM TABLE5 CT1
            WHERE TABLE1.CATEGORY = CT1.CATEGORY_ID
       ), 
    TYPETEXT = (
            SELECT TOP 1 COLUMN1
            FROM TABLE6 CT1
            WHERE TABLE1.TYPE = CT1.TYPE_ID
       ),
    IMAGE = STUFF(( SELECT DISTINCT ',' + CAST(pm.C1 AS varchar(12))
                    FROM TABLE2 pm
                    WHERE pm.ID = TABLE1.ID AND pm.C1 IS NOT NULL AND pm.C1 <> '' 
                    FOR XML PATH('')),
                  1, 1, '' ) INTO #tempRecords       
  FROM dbo.TABLE1 
  WHERE ((@UID is null OR  dbo.TABLE1.ID = @UID )
  ORDER BY TABLE1.UPDATED DESC      

  SELECT @count = COUNT(*) FROM #tempRecords;

  SELECT *, CONVERT([int],@count) AS 'TOTAL_RECORDS'
  FROM #tempRecords 
  WHERE #tempRecords.RN BETWEEN CONVERT([bigint], @START_VALUE) AND CONVERT([bigint], @END_VALUE)      

END

GO
'

1 个答案:

答案 0 :(得分:0)

一些性能提示:

1)@UID为空或者dbo.TABLE1.ID = @UID - &gt;这很糟糕,因为当UID为空时以及不是时,您将有一个执行计划。构建一个动态的SQL查询,你将获得2个执行计划。

2)更新维护计划中的统计数据。

3)检查索引碎片。

4)尝试在不使用临时表的情况下执行相同的操作。

5)尽量避免使用铸件。