论坛首页 Java企业应用论坛

IBATIS 与 Spring 的 MappingSqlQuery 的性能差距问题

浏览 5407 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-21  
表OFMS_DUN_BILL 与 表OFMS_DUN_SERV 通过 SERV_ID 字段关联
两个表的数据量均为百万级
执行这条语句
select count(*) from OFMS_DUN_BILL b, OFMS_DUN_SERV s
where s.SERV_ID=b.SERV_ID
返回的结果为 1百万条

select * from(
  select rows_.*, rownum rownum_ from (
    select b.ID B_ID,  s.SERV_ID S_SERV_ID
    from OFMS_DUN_BILL b, OFMS_DUN_SERV s
    where s.SERV_ID=b.SERV_ID
    and rownum<=20
  )rows_
)where rownum_ >0


情形一
分别用 ibatis 和 Spring 的 MappingSqlQuery 执行上面sql语句(oracle分页语句),
ibatis 需要十几秒,MappingSqlQuery需要0.1秒
ibatis 执行期间 oracle数据库服务器的cpu占用率一直保持在50%左右
(CPU 1G奔3,内存1G,只装oracle)

情形二
如果在子查询的where语句后面限定 and s.SERV_ID<somevalue 限制子查询总记录数在40条内
用ibatis则只需要0.1秒

问题:情形一中 ibatis 和S pring 的 MappingSqlQuery 的性能差别这么大,
请分析可能是什么造成的,谢谢!
   发表时间:2007-09-21  
你是怎么测试的? 把你的测试方法写出来看看
0 请登录后投票
   发表时间:2007-09-21  
IBATIS 查询配置
<select id="findBillWidthPage">
... the test sql ...
</select>


IBATIS DAO 代码
public class BillDao extends org.springframework.orm.ibatis.support.SqlMapClientDaoSupport{

    public List findBills(){
        Map args = new HashMap();
        List bills = super.getSqlMapClientTemplate().queryForList("findBillWidthPage", args);
        return bills;
    }

}



MappingSqlQuery DAO 代码
public class BillDao extends org.springframework.jdbc.core.support.JdbcDaoSupport{

    public List findBills(){ 
        String sql = ...;
        SqlQuery qry = new MappingSqlQuery(this.getDataSource(),sql){
            protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
                String str = rs.getString(1);
                logger.info(str);
                return str;
            }
        };
        return qry.execute();
    }

}
0 请登录后投票
   发表时间:2007-09-21  
换连接池..............
0 请登录后投票
   发表时间:2007-09-21  
ddandyy 写道
换连接池..............


应该是数据库连接花的时间不一样。
0 请登录后投票
   发表时间:2007-09-21  
andyao 写道
ddandyy 写道
换连接池..............


应该是数据库连接花的时间不一样。
把你的spring配置文件贴出来,看看
0 请登录后投票
   发表时间:2007-09-22  
清理了一下多余的jar包,重新配置了一遍,问题就解决了
可能是包冲突也可能是配置错误造成的,谢谢各位啦:)

还有,上面的分页语句是错的,正确的应该是:
select * from(   
  select rows_.*, rownum rownum_ from (   
    select b.ID B_ID,  s.SERV_ID S_SERV_ID   
    from OFMS_DUN_BILL b, OFMS_DUN_SERV s   
    where s.SERV_ID=b.SERV_ID
  )rows_ where  rownum<=20
)where rownum_ >0 
0 请登录后投票
   发表时间:2007-09-23  
把你做的详细写一下吧!这么差这么多了!
0 请登录后投票
   发表时间:2007-09-24  
为什么分页不排序呢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics