如何优化查询

hellokitty1908 2013-01-12 09:56:31
查询出数据,数据量有几十万条。要作一下处理,取出每条记录的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,其它还有别的处理方式吗?可以加快速度的?

一方面是数据量太大,另外这种处理是不是不应该放到页面进行操作?因为很慢,对用户来说感觉非常不好。
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xulqif 2013-01-23
  • 打赏
  • 举报
回复
引用 3 楼 xtfgy2012 的回复:
在数据库层直接搞定,速度是你的几个数量级
正解
IceArmour 2013-01-23
  • 打赏
  • 举报
回复
我也做过这个处理,用的存储过程,按照主键分批处理
xtfgy2012 2013-01-13
  • 打赏
  • 举报
回复
多行记录还要拼在一起的话,只能够用PL SQL了,楼上的方式可以实现,用存储过程吧
yaoweijq 2013-01-13
  • 打赏
  • 举报
回复
果断数据库级别存储过程搞定 批量处理可以更加提高性能
hellokitty1908 2013-01-13
  • 打赏
  • 举报
回复
引用 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实现?
xtfgy2012 2013-01-13
  • 打赏
  • 举报
回复
引用 6 楼 hellokitty1908 的回复:
引用 2 楼 xtfgy2012 的回复:为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去 完全可以一次访问数据库,搞定你的数据 用这种方式吗?SQL code?1select ID||' '||NAME||' '||TYPE1||' '||TYPE2||' '||TYPE3 as content . 但……
直接insert嵌套select不行吗,不需要遍历吧
hellokitty1908 2013-01-13
  • 打赏
  • 举报
回复
在SQL语句中使用wmsys.wm_concat拼接列,但是速度也很慢啊。主要是数据量大。另外由于wmsys.wm_concat有数据条数限制,又重新定义了方法。
hellokitty1908 2013-01-13
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:
一个关键思想是批量处理 1. 查询数据库的时候使用分页 2. 使用StringBuilder 3. 写入数据库也是批量写入 4. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。
查询结果是不需要展示的, 查询数据库的时候使用分页 ,还需要吗?
hellokitty1908 2013-01-13
  • 打赏
  • 举报
回复
引用 2 楼 xtfgy2012 的回复:
为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去 完全可以一次访问数据库,搞定你的数据
用这种方式吗?
select ID||'   '||NAME||'   '||TYPE1||'   '||TYPE2||'   '||TYPE3  as content 
. 但是大数据量时,这种查询出来也非常慢。查询出来数据也要遍历,将content 再拼接起来。只是少了content 内部字段拼接的程序。 在数据库层解决是指的是?可以直接在ORACLE SQL语句中进行遍历每条记录的content再拼接起来?
zlss_17 2013-01-12
  • 打赏
  • 举报
回复
引用 2 楼 xtfgy2012 的回复:
为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去 完全可以一次访问数据库,搞定你的数据
+1,如果真的只是查出来这样处理并存储,还是在数据库中处理吧。
流星陨落 2013-01-12
  • 打赏
  • 举报
回复
xtfgy2012 2013-01-12
  • 打赏
  • 举报
回复
在数据库层直接搞定,速度是你的几个数量级
xtfgy2012 2013-01-12
  • 打赏
  • 举报
回复
为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去 完全可以一次访问数据库,搞定你的数据
Inhibitory 2013-01-12
  • 打赏
  • 举报
回复
一个关键思想是批量处理 1. 查询数据库的时候使用分页 2. 使用StringBuilder 3. 写入数据库也是批量写入 4. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧