日期:2014-05-17  浏览次数:20706 次

关于sql的查询语句
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数据库
程序中total越大(就是第一个for循环的次数越多)运行的速度越慢(这个是指i输出的慢)。。。这个是这么运行的额。。。
sql?查询速度

------解决方案--------------------
这是肯定的,100和1000的循环时间是不同的。
------解决方案--------------------
最好用ArrayList.
------解决方案--------------------
total越大,取出的数据越多,运行越慢
------解决方案--------------------
LZ的意思是说,随着外层循环次数的增加,执行
public List<Down> getDown_news(Integer i)这个方法时候,传进来的i就会增大,
然后每次调用 setFirstResult(i) 方法 消耗的时间就会变长。是这个意思么?

那你可以考虑不要每次都 super.createCriteria(Down.class) ;
而是在第一次 创建了Criteria对象后保留这个对象,以后每次操作 
都调用这个对象,将游标往后移动1000。

这用的是Hibernate吧,我用得少,只能提供个思路了。