如何优化查询

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,其它还有别的处理方式吗?可以加快速度的?

一方面是数据量太大,另外这种处理是不是不应该放到页面进行操作?因为很慢,对用户来说感觉非常不好。
...全文
161 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xulong1 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. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。   深入理解T-SQL体系结构,充分利用高级T-SQL查询技术。   本书深入介绍了T-SQL的内部体系结构,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。通过本书提供的最佳实践和示例代码,数据库开发人员和管理员完全可以掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。通过本书,你将学习到如何:理解逻辑和物理的查询处理;使用方法论优化查询;在查询中用TOP选项修改数据;用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;通过逻辑难题提高你的逻辑能力并掌握查询问题的核心等。   你将学习到如何:   理解逻辑和物理的查询处理;   使用方法论优化查询;   解决关系分区问题;   使用CTE和排名函数简化及优化解决方案;   用各种技术聚合数据,包括附加属性、旋转、直方图和分组因子;   在查询中用TOP选项修改数据;   用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;   通过逻辑难题提高你的逻辑能力并掌握查询问题的核心; 内容简介 本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们将向你揭示基于集合(set-based)查询的强大威力,并解释为什么它比使用游标的过程化编程(procedural programming)更具优势。同时,它还会教你识别使用基于游标解决方案与基于集合解决方案的优劣。   书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。   本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库专业人员。读者可从中学到大量精湛的技巧,这些技巧会充实您的工具箱和编码技能,并让您顺利地开发出高效的解决方案。 作者简介 Itzik Ben-Gan是Solid Quality Learning的首席导师和创始人。他从1999年开始便一直是SQL Server方面的Microsoft MVP,在世界各地讲授 T-SQL查询、编程和查询优化相关的课程,并提供相关咨询服务。他在SQL Server Magazine和MSDN上发表了多篇文章,并被邀请在许多专题会议上做过报告,包括TechEd、DevWeek、PASS和SQL Server Connections。 目录 序 前言 致谢 引言  本书的组织  系统要求  安装示例数据库  更新  代码示例  本书支持 第1章 逻辑查询处理  逻辑查询处理中的各个阶段   逻辑查询处理阶段简介  Customers/Orders场景下的示例查询  逻辑查询处理步骤详解   步骤1:执行笛卡尔乘积(交叉联接)   步聚2:应用ON筛选器(联接条件)   步骤3:添加外部行(Outer Row)   步骤4:应用WHERE筛选器   步骤5:分组   步骤6:应用CUBE或ROLLUP选项   步骤7:应用HAVING筛选器   步骤8:处理SELECT列表   步骤9:应用DISTINCT子句   步骤10:应用ORDER BY子句   步骤11:应用TOP选项  SQL Server 2005中新的逻辑处理阶段   表运算符   OVER子句   集合操作  结论 第2章 物理查询处理  查询处理期间的数据流  编译   Algebrizer   优化   使用查询计划   更新计划  结论   致谢 第3章 查询优化  本章用到的示例数据  优化方法论   分析实例级的等待   联系等待和队列   确定方案   细化到数据库/文件级别   细化到进程级别   优化索引/查询  查询优化工具   syscacheobjects   清空缓存   动态管理对象   STATISTICS IO   测量查询的运

62,634

社区成员

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

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