不知道有人在mysql5.0上 针对10亿条数据操作过没有

Kyle-soft 2010-05-23 11:58:21
大概有5亿条数据1个table,然后table有300个字段,然后是一个老外的设计,系统已经运行了2年多了,没办法了。

现在要针对这个table给用户做报表。这个table好像是用mysql的一个水平分割功能,按天做的分割。

然后用户要的报表我估计会每次大概会有10-20个用户创建报表,然后生成每张报表大概会在这个300个字段的table执行10-20个select 的 sql~,如果不考虑归并、过滤数据的的话。大家有什么好的方法,或者优化的方法提高sql执行效率吗?哭了啊555
如果有用的话放1000分啊~万分感谢啊55
...全文
518 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
marf_cn 2010-06-29
  • 打赏
  • 举报
回复
这么大的数据量早该做散库散表操作了
amdgaming 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 zhanlang9075 的回复:]

建好索引,根据主键查询,应该也挺快的。
[/Quote]
。。。。。。关注
zhanlang9075 2010-06-28
  • 打赏
  • 举报
回复
建好索引,根据主键查询,应该也挺快的。
Kyle-soft 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 ml_dark 的回复:]
LZ节哀吧!
[/Quote]具体点啊?具体点啊?具体点啊?具体点啊?具体点啊?具体点啊?具体点啊?具体点啊?
Kyle-soft 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 ml_dark 的回复:]
LZ节哀吧!
[/Quote]如果我解决了一定会来跟大家分享的。
Kyle-soft 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 ycnanevol 的回复:]
不知道楼主听说过No SQL型数据库,如MongoDB,像这种10条数据量正好适合
[/Quote]10条数据?
空心兜兜 2010-05-26
  • 打赏
  • 举报
回复
这个真大!!!!
  • 打赏
  • 举报
回复
做报表的话,不会全部用到这 5 亿条记录,300 个字段的数据吧?如果真要全部用到的话,那么普通的服务器基本上是承受不了的。

见过最大的一张表是 5.8 亿条记录,Oracle 数据库,数据库服务器是小型机。不要说运算了,就算是 count 一下记录数就得花上一段时间,呵呵。

你的这个业务描述不清,让人摸不着头脑,除了知道是个庞大的数据表之外,其他的啥都没看出来,感觉楼主浪费了这 200 分!
crazylaa 2010-05-26
  • 打赏
  • 举报
回复
报表都有一定模式的。像这么大数据量的报表,要实时出来是不可能的。

你可以看看mysql的schedule的相关部分,利用schedule调用存储过程,存储过程读取报表的相关定义,查询出统计结果,并把结果放到另外的一套数据表中。
mysql5.1已经支持分区了,可以利用分区来分别并行统计。其他索引之类的相信已经做过了,,就不多说啦。

能想到的也就这么多了。

楼主提到oracle的物化视图,其实也是oracle利用了它本身的schedule(10g之前叫job),在固定的时间周期内(由定义物化视图时决定,这个可以看物化视图的相关知识),把源数据表的统计内容提交到中间表(所谓的物化视图其实就是一张物理表)。
huaye 2010-05-26
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
tho 2010-05-26
  • 打赏
  • 举报
回复
如果我理解的不错的话,应该是将你的报表做中间统计表,
每当新增一条记录的时候,同时将需要更新的统计数据做更新,
这样当有人查询统计数据的时候,即可迅速给出

[Quote=引用 18 楼 shine333 的回复:]

本人,如个人用户页所述,不适用任何即时聊天工具,特别是QQ

如想联系,请使用站内短信,或者索取email

引用 12 楼 zlyperson 的回复:
引用 8 楼 shine333 的回复:
另建一套表(原来的表A,新的B),用以存放报表数据。

如果A写入不是非常频繁的话,写入B的时候,即更新相应的B记录(不是重新统计,而是增加)
如果写入频繁,且报表实时性要求不高的话……
[/Quote]
氧气网航 2010-05-26
  • 打赏
  • 举报
回复
我还没见过十亿的数据,所以暂时还不能帮你,学习中。。。
kaynezhang 2010-05-26
  • 打赏
  • 举报
回复
有几个办法,
一就是把不经常更新的数据放入单独的表,主要用于报表打印,然后定期做同步,打印报表就在这这表上操作(像数据仓库一样)
二 mysql 集群
三 使用Amoeba for mysql,做负载均衡和数据分片
ml_dark 2010-05-26
  • 打赏
  • 举报
回复
LZ节哀吧!
ycnanevol 2010-05-26
  • 打赏
  • 举报
回复
不知道楼主听说过No SQL型数据库,如MongoDB,像这种10条数据量正好适合
聪头 2010-05-26
  • 打赏
  • 举报
回复
索引,并分库检索
Kyle-soft 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 shine333 的回复:]
本人,如个人用户页所述,不适用任何即时聊天工具,特别是QQ

如想联系,请使用站内短信,或者索取email


引用 12 楼 zlyperson 的回复:
引用 8 楼 shine333 的回复:
另建一套表(原来的表A,新的B),用以存放报表数据。

如果A写入不是非常频繁的话,写入B的时候,即更新相应的B记录(不是重新统计,而是增加)
如果写入频繁,且报表实时性要求不高的……
[/Quote]
555555555555555555555555555555555555
Kyle-soft 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 scow 的回复:]
表结构不变,想着优化估计做不到。 如果查询有点规律,做个cache层,还行。 一个表就5亿条吗(一天),再考虑300个字段,光在数据库里run sql应该都很慢, 哪怕加了索引
[/Quote]

不是一天是这个表最多5亿条
Kyle-soft 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 crazylaa 的回复:]
报表都有一定模式的。像这么大数据量的报表,要实时出来是不可能的。

你可以看看mysql的schedule的相关部分,利用schedule调用存储过程,存储过程读取报表的相关定义,查询出统计结果,并把结果放到另外的一套数据表中。
mysql5.1已经支持分区了,可以利用分区来分别并行统计。其他索引之类的相信已经做过了,,就不多说啦。

能想到的也就这么多了。

楼主提到oracle的……
[/Quote]

mysql有什么 m s模式~不知道能否使用。我在5亿条数据里检索时间大概是30分钟。但是几个sql并发执行的时候比较有问题。目标是10分钟。
scow 2010-05-26
  • 打赏
  • 举报
回复
表结构不变,想着优化估计做不到。 如果查询有点规律,做个cache层,还行。 一个表就5亿条吗(一天),再考虑300个字段,光在数据库里run sql应该都很慢, 哪怕加了索引
加载更多回复(19)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧