Hibernate查询效率

本文主要测试两种Hibernte检索的效率:
1. 只访问一次数据库,将所有需要的对象检索出来,然后数据库外部做业务逻辑处理
2. 利用HQL的函数做业务逻辑处理,但需要多次访问数据库。

测试1代码:
private static final String HQL1 = 
        "from Object object where object.uuid in ";
    @Override
    public void find1(String ids) {
        for (int i = 0; i < 10; i++) {
            this.find(HQL1+ "(" + ids + ")" );
        }
    }


测试2代码:
private static final String HQL2  = 
        "select count(distinct object1.uuid) from Object1 object1 where object1.object2.uuid = ?";
    @Override
    public void find2(String ids) {
        String [] idArray = ids.split(",");
        for (String id : idArray) {
            this.find(HQL2, new Object[]{Long.valueOf(id)});
        }
    }


运行后发现第一种方法耗费时间为:900ms, 第二种方法耗费时间为:180ms

由此说明:
1. 利用Hibernate直接加载对象是比较耗时的。
2. 尽可能利用HQL自带的函数来处理,又是虽然这样会造成多次的数据库访问,但依然有很高的效率。
3. 利用HQL/SQL做业务处理比加载对象再做处理要好很多。

你可能感兴趣的:(sql,Hibernate)