现在写了一个CS的比对工具,让excel里面的数据和数据库里面的2个表数据根据身份证号进行比对,找出身份证号一致的数据写入到另外一个excel中,刚开始的时候我是把所有数据读入内存,然后一条一条的查询,最后写入,但是这样很慢,10W左右的数据大概就需要1、2个小时,后来我的方法是所有excel中的数据写入到数据库临时表中,然后找出比对结果,但是这个时候插入的时间又很长,查询倒是很快,时间也得1个小时左右,我想问下还有什么办法进行优化吗,我还想到了拼SQL用where zjhm in (.....)这样或者 zjhm='' or zjhm='' 但是这样十万条左右就卡死了,这个怎么处理才更好些 。。。。。。
15 回复
我写的是select * from bdc_regn_yg,至于他有没有优化比如我下拉的时候再进行查询就不知道了 ,但是我这样写
这个是测试类
public static void main(String[] args) {
Ioc ioc = new NutIoc(new JsonLoader("ioc/dao.js"));
Dao dao = ioc.get(Dao.class);
System.out.println("----建立连接-------------");
Stopwatch sw = Stopwatch.begin();
List<YgHelper> list = getInfo(dao,"bdc_regn_yg");
sw.stop();
System.out.println(list.size()+"----耗时为-----"+sw.du());
}
private static List<YgHelper> getInfo(Dao dao,String tableName){
String sqlStr="select qlrzjbh,djkid,fdzl,jzmj from "+tableName;
Sql sql = Sqls.create(sqlStr);
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao.getEntity(YgHelper.class));
dao.execute(sql);
List<YgHelper> list = sql.getList(YgHelper.class);
return list;
}
这个是辅助的实体类
public class YgHelper {
private String qlrzjbh;
private String djkid;
private String fdzl;
private String jzmj;
public String getQlrzjbh() {
return qlrzjbh;
}
public void setQlrzjbh(String qlrzjbh) {
this.qlrzjbh = qlrzjbh;
}
public String getDjkid() {
return djkid;
}
public void setDjkid(String djkid) {
this.djkid = djkid;
}
public String getFdzl() {
return fdzl;
}
public void setFdzl(String fdzl) {
this.fdzl = fdzl;
}
public String getJzmj() {
return jzmj;
}
public void setJzmj(String jzmj) {
this.jzmj = jzmj;
}
}
```
结果是 30394----耗时为-----32686
添加回复
请先登陆