我的数据库是: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..