• SQL2000游标引发的性能问题!


         今天客户反馈到这样一个问题,同样一个页面不同的用户进入,有些用户不会出错,有些用户则显示:

    SQL错误:超时时间已到。在操作完成之前超时时间已过或服务器未响应。这样的错误。

          于是我查了一下数据库,发现凡是出错的用户都具有相同的一个特点:就是数据量较大。

    再查询程序,原来SQL语句:用了function,function 里还用了游标。

    select *,dbo.F_AcceptUnit as Unit  from Iw_SendInfo

    Create function F_AcceptUnit(@sID int ,@UID int)
    returns varchar(4000)
    as
    begin
    declare @UnitName varchar(1000),@Unit varchar(4000)
    set @Unit=''
    DECLARE Dname_Cursor CURSOR FOR
    select Dname from IwUser where ID in (select userid from inceptinfo where sid=@sID and  userid!=@UID)
    open Dname_Cursor
    FETCH NEXT FROM Dname_Cursor
    INTO @UnitName
    WHILE @@FETCH_STATUS = 0
    BEGIN

    FETCH NEXT FROM Dname_Cursor
    INTO @UnitName
     set  @Unit =@Unit+ @UnitName +','
    end
    CLOSE Dname_Cursor
    DEALLOCATE Dname_Cursor
    return @Unit
    end

     SQL2000里面本来游标的性能就比较低下,然后SQL里面再查询function,无疑是雪上加霜。游标还是慎用为好啊!

  • 相关阅读:
    rails的字符编码
    rails中ActionController::InvalidAuthenticityToken解决办法
    ruby on rails 实战(二)
    ruby on rails 实战(一)
    朴素贝叶斯趣味挑战项目
    python re的findall和finditer
    使用Naive Bayes从个人广告中获取区域倾向
    第五周(2.5~2.11)
    第四周(1.29~2.4)
    第三周(1.22~1.28)
  • 原文地址:https://www.cnblogs.com/anson/p/1311526.html
Copyright © 2020-2023  润新知