当前位置:文章写作网 >日记 >日记 >数据库优化-like语句

数据库优化-like语句

2008-04-18 17:25 作者:tshfang 阅读量:5279 推荐11次 | 我要投稿

ERP软件:浪潮gs5测试版

问题:

在岗位授权,点击数据权限授权的时候提示:timeout server is not responding

测试环境:

4核cpu 2g内存 win2000sp4+sql2000sp4 34个实例(数据库) 同时使用系统的用户大概有20人

出现问题的实例有4-5个.

分析问题:

通过跟踪发现是存储过程SP_GSP_GetBizObject执行的时候大概使用了30秒.

说了半天废话,我们先看看存储过程吧.

create procedure SP_GSP_GetBizObject

(

@ownerid char(36)

)

as

select ID,CODE,PATH,LAYER,ISDETAIL,NAME,DESCRIPTION,PROFILE,SYSINIT,DATAMODELID from GSPBIzObject,

(

select distinct ID refID from GSPBizObject,

(

select Path as RefPath from GSPBizObject,

(

select distinct BizObjId RefBizObjID from GSPBizObjectOP,

(

select distinct BizOPID RefBizOpID from GSPROLEAss,

(

select distinct roleid RefRoleID from

(

select roleid from GSPPOSASS where positionid = @ownerid

) roles

) RoleSet

where roleID = RefRoleID

) BizOPIdSet

where ID = RefBizOpID

) BizObjectIDSet

where id = RefBizObjID and HasAuAssign = '1'

) RefBizObjIDSet

where RefPath LIKE PATH + '%' /*这条语句在效率上有问题*/

)RefIDSet

where ID=refID

order by PATH

分析发现,时间浪费在条件:where RefPath LIKE PATH + '%'

直接去掉like条件,执行时间是2秒而使用like执行时间是28秒.

那么我们考虑修改like条件,找一个等价的语句吧.

利用sql server自带的函数解决.如下:

where Path = left(refpath,len(Path))

解决方法:

修改储存过程使用条件where Path = left(refpath,len(Path))执行时间是2秒.

建议我们的存储过程尽量不要使用like语句.这样程序的执行效率很低.

其他人在看啥

    《数据库优化-like语句》的评论 (共 0 条)

    • 还没有人评论,赶快抢个沙发