Ibatis.net性能的一个分享

大概一年左右的时间里数据库的CPU一直处于很高的负荷中,从40%一直攀升到如今的80%,随着数据量的增加,负担越来越重,已经频繁超时,且濒临无法服务的边缘。
经长期的调查发现这是Ibatis.net的一个性能问题(同样适用于Ibatis)。
问题是这样的:项目主要业务表是Table表,其中的主键是一个varchar(36)类型的Guid,当每次搜索一条记录时我们会使用这样的一个statement:

<select id="GetData" parameterClass="string" resultMap="Result">
select *
from Table with (nolock)
where Id = #value# and Status >= 0
</select>

虽然看着十分正常,但是却是问题的关键,因为parameterClass是string,当Ibatis.net动态组成的sql语句会将其默认定为一个nvchar(36)来对数据库进行查询,这样与原有数据库的类型不一样,
造成了全表扫描,解决办法是制定传入类型的dbType(inline方法为):


<select id="GetData" parameterClass="string" resultMap="Result">
select *
from Table with (nolock)
where Id = #value:VarChar# and Status >= 0
</select>

当然也可以使用parameterMap来解决(具体参考Ibatis手册)。通过这个办法数据库压力已经只有17%左右,非常有效。我认为在string作为参数且数据库字段是一个varchar的时候都可以使用该方法,且效率很高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值