woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

java几千万行数据做查询的时候?

我的数据库是:mysql
一张表的数据上了千万行,而且每天都以10几万行在增张。

目前需要解决的问题,我的页面在做几个字段的查询的时候显示出来居慢,我用的是java,没用
什么框架,直接JDBC查询。

大家有什么好方法没?
我目前想这样搞下:写个存储过程,JAVA调存储过程返回的数据集(集合),应该快的多,
但是mysql可以返回来数据集吗,java代码怎么得到?又不太好搞?


这样的问题大家应该碰到过,有经验的朋友们请告诉下,谢谢大家?
问题补充:
我的SQL语句里面用了日期函数判断,在日期上建立索引,会失效吗?
比如:......where ((TRUNC(IMMS_REPORT_REALSEND.DATCREATE) >= TRUNC(sysdate))

采纳的答案

2008-12-15 binlinux (初级程序员)

最好是拆分表,将历史数据移走


提问者对于答案的评价:
我就这样做算了.

其他回答

可以拆分表~

czx566 (初级程序员) 2008-12-11

一次取超过1W行的数据,估计是用INDEX的效果也好不到哪儿去。

sdh5724 (资深程序员) 2008-12-11

如果你不要一次看全部数据的话,可以做个类似分页的东西,这样结果集的数据不会一次全部返回,每次返回的只是你设定的一页要显示的数据条数。

enetor (初级程序员) 2008-12-11


建议对在数据库设计上做些文章。

比如可以考虑对表进行横向分割纵向分割

可以把你的表结构和业务拿出来讨论下。

pangyi (初级程序员) 2008-12-11

建立索引是唯一办法

墓里活人 (资深程序员) 2008-12-11

楼主是MYSQL

千万级别的数据量对mysql就是一个严峻的考验!
不推荐索引!



还是推荐分表!

czx566 (初级程序员) 2008-12-11

mysql有函数索引么。。。。。
1000W
数据, 目前的机器轻松应付的。
1。 IMMS_REPORT_REALSEND.DATCREATE 现建立索引
2。 TRUNC这么用不对的, 你可以先计算一个 sysdate 当天00:00:00的时间,然后再比较, 这样就对了。

 

sdh5724 (资深程序员) 2008-12-11

to 墓里活人:

  
从战术上来说,建立索引是个不错的办法。

   
从战略上来说,数据分割是明智之举。

pangyi (初级程序员) 2008-12-11

现在我也遇到了这样的问题,用得方法就是分表,按天日期来分表,每天一张表。不过这样查询就有点问题了,正在想办法解决.........

qiaoakai (初级程序员) 2008-12-11

引用

现在我也遇到了这样的问题,用得方法就是分表,按天日期来分表,每天一张表。不过这样查询就有点问题了,正在想办法解决.........



不建议采用时间来分表,一天一张表,维护程序比较复杂。

建议从业务上做划分。以电厂的运行数据为例。电厂运行时,有很多测点。测点的数据是以秒为单位产生的。若将这些数据都放到一张表中,一年下来至少有上亿条数据。电厂一般至少有20000多个测点。但若给每个测点建立一张数据表,则数据量会分解到20000多张表中,每张表里的数据一年下来也就数十万而已。从应用的角度,也可以很好的对数据进行分析和管理。

pangyi (初级程序员) 2008-12-12

用日期函数的时候不会用到索引

waterdh (中级程序员) 2008-12-12

建议分割表

queue19 (初级程序员) 2008-12-12

可以每天晚上对数据进行合并,汇总到另外一张或几张表中,比如日表,月表.

大力水手 (初级程序员) 2008-12-12

TOBAO也是用MYSQL   先看看业务允许分表不,如果不允许 那么建议你把时间判断的给去掉  你取的记录应该不多,如果多就分次取,在内存里面进行判断 这样可能会快点。不要让INDEX失效。

fjlyxx (中级程序员) 2008-12-13

根据查询条件加index..

 

posted on 2009-06-09 13:27 肥仔 阅读(321) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理