当前位置:编程学习 > JAVA >>

如何优化查询

查询出数据,数据量有几十万条。要作一下处理,取出每条记录的ID,NAME,TYPE1,TYPE2,TYPE3,拼成字符串。
存储到数据库中,后期再根据数据库里的内容生成文件。  这段代码的处理速度非常慢。

String s = "";
for (int i = 0; i < list.size(); i++) {
 Map map = (Map) list.get(i);
         s+=map.get("ID").toString()+map.get("NAME").toString()+map.get("TYPE1").toString()+map.get("TYPE2).toString()+map.get("TYPE3").toString()+ "\r\n";



现在想的方法是String换成 StringBuffer,其它还有别的处理方式吗?可以加快速度的?

一方面是数据量太大,另外这种处理是不是不应该放到页面进行操作?因为很慢,对用户来说感觉非常不好。 --------------------编程问答-------------------- 一个关键思想是批量处理
1. 查询数据库的时候使用分页
2. 使用StringBuilder
3. 写入数据库也是批量写入
4. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。 --------------------编程问答-------------------- 为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去
完全可以一次访问数据库,搞定你的数据 --------------------编程问答-------------------- 在数据库层直接搞定,速度是你的几个数量级 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 xtfgy2012 的回复:
为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去
完全可以一次访问数据库,搞定你的数据


+1,如果真的只是查出来这样处理并存储,还是在数据库中处理吧。 --------------------编程问答--------------------
引用 2 楼 xtfgy2012 的回复:
为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去
完全可以一次访问数据库,搞定你的数据


用这种方式吗?
select ID||'   '||NAME||'   '||TYPE1||'   '||TYPE2||'   '||TYPE3  as content 
  .

但是大数据量时,这种查询出来也非常慢。查询出来数据也要遍历,将content 再拼接起来。只是少了content 内部字段拼接的程序。

在数据库层解决是指的是?可以直接在ORACLE SQL语句中进行遍历每条记录的content再拼接起来?

--------------------编程问答--------------------
引用 1 楼 Inhibitory 的回复:
一个关键思想是批量处理
1. 查询数据库的时候使用分页
2. 使用StringBuilder
3. 写入数据库也是批量写入
4. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。


查询结果是不需要展示的, 查询数据库的时候使用分页 ,还需要吗? --------------------编程问答-------------------- 在SQL语句中使用wmsys.wm_concat拼接列,但是速度也很慢啊。主要是数据量大。另外由于wmsys.wm_concat有数据条数限制,又重新定义了方法。 --------------------编程问答--------------------
引用 6 楼 hellokitty1908 的回复:
引用 2 楼 xtfgy2012 的回复:为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去
完全可以一次访问数据库,搞定你的数据

用这种方式吗?SQL code?1select ID||'   '||NAME||'   '||TYPE1||'   '||TYPE2||'   '||TYPE3  as content   .

但……

直接insert嵌套select不行吗,不需要遍历吧 --------------------编程问答--------------------
引用 9 楼 xtfgy2012 的回复:
直接insert嵌套select不行吗,不需要遍历吧 …


但是数据是这样的形式:
ID NAME TYPE1 TYPE2 TYPE3
1  MARY  T1    T2    T3
2  TOM   T11   T22   T33
3  JERRY T12   T13   T14
......

最后拼接成这样的形式,放到数据库的一个字段里:
1  MARY  T1    T2    T3
2  TOM   T11   T22   T33
3  JERRY T12   T13   T14

insert嵌套select可以理解,但多条记录的拼接怎么用SQL实现? --------------------编程问答-------------------- 果断数据库级别存储过程搞定
批量处理可以更加提高性能 --------------------编程问答-------------------- 多行记录还要拼在一起的话,只能够用PL SQL了,楼上的方式可以实现,用存储过程吧 --------------------编程问答--------------------
引用 3 楼 xtfgy2012 的回复:
在数据库层直接搞定,速度是你的几个数量级

正解 --------------------编程问答-------------------- 我也做过这个处理,用的存储过程,按照主键分批处理
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,