读书人

JAVA多线程可以拔高Oracle的查询速度吗

发布时间: 2013-08-06 16:47:25 作者: rapoo

JAVA多线程可以提高Oracle的查询速度吗?来说说意见吧!
先感谢各位的点击~!入正题:

Student类 里面有 id name sex 语文分数 数学分数 英语分数

数据库表有如下字段: id ExamDate(考试日期) 语文分数 数学分数 英语分数
7001 2013-01-01 80 80 78
7002 2013-01-01 78 70 90
7003 2013-01-01 78 70 90
7001 2013-02-01 80 80 78
7002 2013-02-01 78 70 90
7003 2013-02-01 78 70 90
..............数据量有800W

需求:根据id查询一个年级(有年级和学员id的关系表)每位学员考试日期范围内的各个分数,算语文的总分,数学的最高分,英语的平均分。

目前我的做法:1.定义一个方法获取年级范围内的学员id,返回个List<Student>出去。
2.再写个方法接住List<Student>进行遍历,一个个id拿出来查询上面的表,
在游标next的同时就计算总分,判断最高分,计算平均分,然后add。


最后返回出来的就是一个计算好的List。

在此感谢各位高手们给点意见,这个例子是根据我的工作需求修改了方式表达出来的,数据表已经建了索引,测试查询速度一条6-10毫秒左右,但是速度不太稳定,有时候先查了第一次有点慢,第二次就开始快。我最想知道的就是这种循环遍历查询的方式可不可取,能否改进,我在想能不能用多线程来做,并发进行总比一个个来快一点吧。求解!求意见! 多线程 Oracle JAVA高性能开发 Java
[解决办法]
那个,数据max和average函数能用么,效率如何?

个人感觉同一个数据库操作,多线程实现,很难把控等待时间(因为要将各个线程的结果汇总)。

如果实时性要求不高的话,可不可以另外建个表,存放一些关键数据,定时任务在表操作少的时候计算,将结果存到这个表里,以供取用?
[解决办法]
对数据库操作采用多线程,最好别指望能有几倍的速度。毕竟数据库系统是独立的,总的性能就这么点,同时访问的次数多了,也只能共同分享数据库的资源。
[解决办法]
补充下:
第一步和第二步:貌似一条SQL查询语句就可以实现;800W条数据个人觉得不算多,Oracle性能还是扛得住的。
建议在不影响原有系统的性能的前提下,对你查询用到的几个字段做一个联合索引。
其实,这个操作,用存储过程绝对会比你ODBC还是JDBC啥的,都要快的多。


[解决办法]
回答几个问题:
1、我在想能不能用多线程来做,并发进行总比一个个来快一点吧
—— 不建议这么做,增加程序复杂度,所能得到的提升不高。
2、有时候先查了第一次有点慢,第二次就开始快
—— 蛮正常的,Oracle的缓存不是摆着看的。
3、那怎么优化呢?
—— 类似5楼说法,这类就用SQL解决好了。
4、800W条数据啊
—— 其实看你的需求,只是统计某个班,不至于一个班一次考试就有800W条对吧?所以在 班级 和 考试日期上做“联合索引”!当然,索引最终取决于你的where究竟有几个检索条件。


Select max(语文分数), avg(语文分数), ....
From student
Where id = 7001 And 其它条件

读书人网 >J2EE开发

热点推荐