关于Hibernate的查询优化

sjmhai110 2013-01-27 12:20:41
public String downnew() throws Exception{
int total = downManager.get_total();//error=0数据个数
int p=total/1000;
/*if(p%1000>0)
p=p+1;*/

System.out.println("开始执行down导入程序");
System.out.println("total:"+String.valueOf(total));
System.out.println("p:"+String.valueOf(p));
int i=base;
try {
for(int pp=0;pp<p;pp++){
List<Down> listdown = downManager.getDown_news(pp*1000);
for(Down d :listdown){
Integer fid=d.getFid();
Integer zid=d.getZid();
String chapter=d.getChapter();
String type=d.getType();
Date downtime=d.getTime();
boolean error=d.isError();

Downnew d_new=new Downnew();
d_new.setFid(fid);
d_new.setZid(zid);
d_new.setChapter(chapter);
d_new.setType(type);
d_new.setTime(downtime);
d_new.setError(error);
try{
hibernateDao.save(d_new);
System.out.println("i:"+String.valueOf(++i));
}catch (Exception e) {
e.printStackTrace();
}
}
}
}catch (Exception e) {
e.printStackTrace();
}

System.out.println("----------------------------开始执行down导入程序完成-----------------------------------------------");
return "input";

}


/**
* 获取down列表error=0的前面100个数据----调试用
* @param i :结果集的第i条开始获取
*/
public List<Down> getDown_news(Integer i){
return super.createCriteria(Down.class)
.add(Restrictions.eq("error", false))
.setFirstResult(i)
.setMaxResults(1000)
.list();
}


mysql数据库
这里是查询获取的数据很大,所以想到了先循环,然后分页来查询的方法,但是随着外循环次数的的增加,单次循环的时间也增加了,即p越大,每次循环的时间就越大。。。这个这么优化啊?


...全文
88 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sjmhai110 2013-01-27
引用 1 楼 lulihong324 的回复:
个人认为你这个程序片段查询时没有问题的,反正所有记录都要获取一次。而是把数据转换为Downnew对象然后保存的时候可以优化一下,采用PreparedStatment批量添加。
话说我直接设置total值,5000和50000没次循环的速度差蛮多。。。
  • 打赏
  • 举报
回复
Effort Rainbow 2013-01-27
个人认为你这个程序片段查询时没有问题的,反正所有记录都要获取一次。而是把数据转换为Downnew对象然后保存的时候可以优化一下,采用PreparedStatment批量添加。
  • 打赏
  • 举报
回复
Effort Rainbow 2013-01-27
引用 2 楼 sjmhai110 的回复:
引用 1 楼 lulihong324 的回复:个人认为你这个程序片段查询时没有问题的,反正所有记录都要获取一次。而是把数据转换为Downnew对象然后保存的时候可以优化一下,采用PreparedStatment批量添加。 话说我直接设置total值,5000和50000没次循环的速度差蛮多。。。
total = p * m; 每次查询多少个,你自己去尝试。 肯定需要循环,我也不确定那个数值最好,但是保存那里肯定可以优化
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2013-01-27 12:20
社区公告
暂无公告