社区
Java EE
帖子详情
一次取出3万多条记录,这个时候使用rs.next()遍历,共耗时37秒,正常么?
caina3
2006-01-19 08:34:22
如题。
因为需要取出这3万多条记录然后进行统计分析,结果发现速度很慢,于是一步一步的测试时间消耗,结果发现居然是rs.next()耗时???
郁闷+疑问中......
...全文
843
22
打赏
收藏
一次取出3万多条记录,这个时候使用rs.next()遍历,共耗时37秒,正常么?
如题。 因为需要取出这3万多条记录然后进行统计分析,结果发现速度很慢,于是一步一步的测试时间消耗,结果发现居然是rs.next()耗时??? 郁闷+疑问中......
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Larry1030
2006-01-20
打赏
举报
回复
gz
TinyJimmy
2006-01-20
打赏
举报
回复
一次取3万记录应该不会慢, 如果只是rs.next(), 我的时间大约 1.5秒, 如果将每个字段都 rs.getString()一次, 时间大约2.8秒 测试表38个字段, 内部有int, datetime, char, dec等不同类型的字段. 以前曾经做个一个不同数据库, 不同网络应用环境下的数据IO测试. 影响速度主要有:
1. 硬盘速度
很多时候一台机器又做数据库服务器, 又做应用服务器, 当看到硬盘灯常亮时, IO效率会显著下降
2. 网络
无论多好的网络, 只要通过网络就可能有开销, 网络主要开销在连接建立和并发通信碰撞上.如果通信使用大数据包一次传输, 要比多个数据包多次传输效率要高
3. CPU
如果运算CPU达到100%时, 并发计算效率显著下降
4. 数据库
数据库索引对设计数据存储最有效因素, 定期重新优化索引会提高整体计算效率. 索引建立要和计算方法相对应, 最大限度的发挥索引功效
SQLServer/Oracle/DB2使用运算速度差不多, 写入和读取相差不会超过5%
5. JDBC驱动
不同JDBC驱动, 对运算有一定影响. Oracle/DB2针对不同的应用环境, 都有本地和网络模式, 本地模式要比网络模式要快
6. 病毒软件
病毒软件对设计数据读写有相当大影响, 特别是涉及到文件读写的情况, 满负荷运行, 效率损失在10%~20%间
实践中, 运行最快的的情况是两机用直连线相连, 一台做数据存储, 一台做数据运算, 通信1000M, 得到的效果最好, 测试在不同的数据量, 测试曲线也是最稳定的
nick_622
2006-01-20
打赏
举报
回复
我也遇到和你一样的问题,你可以参考我的程序:
for(int i = 1;i <=154000; i+=1000){
String query = "SELECT html FROM dianping_page limit "+i+",100";
ResultSet rs = stmt.executeQuery(query);
//get count of table
//while has next 100 records
// get 100 record from db;
process(args, config, rs);
// count -100
// while end
}
hogn
2006-01-20
打赏
举报
回复
1、数据的计算,不要放到查询中。
2、查询显示太多的数据时,采用分页。
3、不要一次性把所有数据放到缓存里。
挑大梁
2006-01-20
打赏
举报
回复
结论就是没有问题了,一次取三万条
深蓝
2006-01-20
打赏
举报
回复
不呀!表达的很好啊,技术语言无须修饰.我理解你说的情况,并对你的做法表示支持!楼主是搞DM的吗?有机会交流一下
QQ: 59896103
MSN:hbsycw@hotmail.com
ChDw
2006-01-20
打赏
举报
回复
可以的话最好使用存储过程在数据库中计算完成,如果必须在Java中获取你可以试试设置一下
rs.setFetchSize(int rows);这样可能可以提高一点速度,
至于设置多大才能最好,就得多多测试了。这个和环境因素太大关系
caina3
2006-01-20
打赏
举报
回复
晕死,上面的话语句都有不通畅的地方,BS自己,口头表达能力越来越差了。
caina3
2006-01-20
打赏
举报
回复
charlie0895
对,你说的很对,这个思路本身就存在问题。不过当时的情况很急,当我获得需求的时候,经理告诉我,必须两天之内全部出来,否则这个客户我们基本就拿不到了。这里面需要获取几万条(当时并没有说是几万条,当时说的几万条的几十之一,打个比方就是当时说是要对一个学校的成绩进行统计,而后来却用于几十个学校的统计)记录的 中位数 标准差 偏度 峰值 均分差 标准误 鱼尾检验 等等。这些东西是我们平时不常用的,我必须立刻去查找资料然后解决(客户没有给我们资料,在市场中,常常很多的时候为了抢得一个市场,是需要我们在只有并不完善的需求的情况下出手的)。这个时候对我来说,分秒必争。于是我就只好按照最快的编码方式,而不是性能最优的方式。最后的结果是,我们是第一个出与他们的需求吻合度最高的DEMO(虽然是DEMO,但是却是从用户角度看,却是可以用他们的基础数据进行测试的一个小型演示系统),于是我们获得了单子。
而发现这个问题的时候,原先两天做的那个东西他们在继续“试用”,同时需求什么的在与他们联络从新获取。在这个阶段,发现原有的东西在某个页面速度很慢,最后调查出来发现是出现在那里。这时我对rs.next()的效率产生了疑问,我怀疑要么是rs.next()在记录较多的情况下耗时过长,要么是程序在其他地方还存在问题。于是我提出了我的问题。
//另:最后的结果是,其实也不是rs.next()的问题,凌晨6点的时候,修改了一些代码,现在在数据库没有索引的情况下,第一次访问页面时,5秒钟之内就可以出结果了.至于前面说用delphi测试ado花了9秒的事情,这个我不是很熟悉DELPHI,可能用法本身就是错的。不然我想它不应该这么慢的.
jspxnet
2006-01-20
打赏
举报
回复
一次去取这么多 思路就不对,有10万的时候,你不是要一下搞死机?
分时间段等方法,一次1000条左右的搞就行了.
Little_qd
2006-01-20
打赏
举报
回复
设计思路有些问题
尝试大部分的计算放到数据库进行
比如存储过程
kakashemen
2006-01-20
打赏
举报
回复
这个可以用算法来解决,不知道你为什么要一次取这么多,但是可以想象正常情况下不必要一次把所有都取出来了。
xiongbing528
2006-01-20
打赏
举报
回复
是啊。。必要的时候你可以考虑建立族或者是索引。从数据库端下手。。
ywz520
2006-01-20
打赏
举报
回复
很有经验,加分!
charlie0895
2006-01-20
打赏
举报
回复
一次去取这么多,这个思路本身就存在问题,问题不在于去提高取三万条数据的速度,而在于先减少一次取的数据量,思考什么样的逻辑是可行性良好的
doway
2006-01-19
打赏
举报
回复
rs.next() 只是移动一下指针,应该非常快。
结果集中行数很多时,不应该包括可变长度的列。
zdnetchina
2006-01-19
打赏
举报
回复
数据库用索引优化一下
zdnetchina
2006-01-19
打赏
举报
回复
一次取出来有意义吗?
caina3
2006-01-19
打赏
举报
回复
yaray(雅睿,生活在别处)
这么说来,就的确是rs.next()在记录较多的情况下耗时过长了?
我用delphi使用ado测过,相同情况下时间消耗只有4分之一。
caina3
2006-01-19
打赏
举报
回复
TO FaJa(FaJa):
数据统计
需要获取几万条记录的 中位数 标准差 偏度 峰值 均分差 标准误 鱼尾检验 等等
也许可以不一次取这么多条记录
不过那样的话中间的处理会比较烦比较容易出错
加载更多回复(2)
PowerBI系列之Report Server专题
Report Server下载安装和配置 3. 安装PowerBI Desktop
RS
版本和发布报表 4. Report Portal访问和介绍 5. 文件夹和报表的管理和权限 6. 设置报表定时刷新 7. RLS权限设置 8.
RS
...
sql如何遍
历
几百万的表_关于SQL查询效率,100w数据,查询只要1秒
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1. -- 建表 create table t_userinfo ( userid int identity(1,1) primary key nonclustered, nick varchar(
聊聊Java中代码优化的30个小技巧
不知道你在实际的项目开发中,有没有
使用
过固定值?}thrownewBusinessException("该用户不存在");}其中1000L和该用户不存在是固定值,每次都是一样的。既然是固定值,我们为什么不把它们定义成静态常量呢?这样语义上更直观,方便统一管理和维护,更方便代码复用。...}privatestaticfinalStringNOT_FOUND_MESSAGE="该用户不存在";...}
使用
关键字修饰静态常量,static表示静态的意思,即类变量,而表示。...
数据库性能优化详解
出处: https://www.cnblogs.com/easypass/archive/2010/12/ 08/1900127.html 1.数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制
java上亿数据如何秒查,怎么更快速的查询1000条数据
如何更快速的查询1000条数据?现在的需求是这样的,我有一个模板,里面是JsonArray数据,里面有1000条JSONObject,每个object都有一个客户和产品属性,形如这样{"data":[{"account":"01","product":"p1"},...]}我现在要解析这个JSON,根据每一个object里的客户和产品,到另一个表里来查询它的平均销量和平均单价,然后返回一个加了平均...
Java EE
67,515
社区成员
225,878
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章