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

我的数据库是:mysql

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



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

什么框架,直接JDBC查询。



大家有什么好方法没?

我目前想这样搞下:写个存储过程,JAVA调存储过程返回的数据集(集合),应该快的多,

但是mysql可以返回来数据集吗,java代码怎么得到?又不太好搞?





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

比如:......where ((TRUNC(IMMS_REPORT_REALSEND.DATCREATE) >= TRUNC(sysdate))

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

可以拆分表~

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

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

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

比如可以考虑对表进行“横向分割”或“纵向分割”。

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

建立索引是唯一办法

楼主是MYSQL!

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

还是推荐分表!

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

 

to 墓里活人:

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

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

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

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

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

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

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

建议分割表

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

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

根据查询条件加index..