大概有5亿条数据1个table,然后table有300个字段,然后是一个老外的设计,系统已经运行了2年多了,没办法了。现在要针对这个table给用户做报表。这个table好像是用mysql的一个水平分割功能,按天做的分割。然后用户要的报表我估计会每次大概会有10-20个用户创建报表,然后生成每张报表大概会在这个300个字段的table执行10-20个select 的 sql~,如果不考虑归并、过滤数据的的话。大家有什么好的方法,或者优化的方法提高sql执行效率吗?哭了啊555
如果有用的话放1000分啊~万分感谢啊55

解决方案 »

  1.   

    关于 MySQL 专业的问题,建议把这个帖移到 MySQL 版块去吧。 
      

  2.   

    另建一套表(原来的表A,新的B),用以存放报表数据。如果A写入不是非常频繁的话,写入B的时候,即更新相应的B记录(不是重新统计,而是增加)
    如果写入频繁,且报表实时性要求不高的话,可以定期重新统计B表记录
      

  3.   

    也好好吧~~~就想知道db级有没有什么好的办法
    比如像oracle的物化视图等。或者对sql语句本身有没有什么意见。或者有人有这方面经验的谈谈啊555
      

  4.   

    本人,如个人用户页所述,不适用任何即时聊天工具,特别是QQ如想联系,请使用站内短信,或者索取email
    再具体就是你的业务。
      

  5.   

    学习记得从哪里看过,一个table不要存放超过1000万条数据,不要超过80个字段
      

  6.   

    有几个办法,
    一就是把不经常更新的数据放入单独的表,主要用于报表打印,然后定期做同步,打印报表就在这这表上操作(像数据仓库一样)
    二 mysql 集群
    三 使用Amoeba  for mysql,做负载均衡和数据分片
      

  7.   

    报表都有一定模式的。像这么大数据量的报表,要实时出来是不可能的。你可以看看mysql的schedule的相关部分,利用schedule调用存储过程,存储过程读取报表的相关定义,查询出统计结果,并把结果放到另外的一套数据表中。
    mysql5.1已经支持分区了,可以利用分区来分别并行统计。其他索引之类的相信已经做过了,,就不多说啦。能想到的也就这么多了。楼主提到oracle的物化视图,其实也是oracle利用了它本身的schedule(10g之前叫job),在固定的时间周期内(由定义物化视图时决定,这个可以看物化视图的相关知识),把源数据表的统计内容提交到中间表(所谓的物化视图其实就是一张物理表)。
      

  8.   

    做报表的话,不会全部用到这 5 亿条记录,300 个字段的数据吧?如果真要全部用到的话,那么普通的服务器基本上是承受不了的。见过最大的一张表是 5.8 亿条记录,Oracle 数据库,数据库服务器是小型机。不要说运算了,就算是 count 一下记录数就得花上一段时间,呵呵。你的这个业务描述不清,让人摸不着头脑,除了知道是个庞大的数据表之外,其他的啥都没看出来,感觉楼主浪费了这 200 分!
      

  9.   

    表结构不变,想着优化估计做不到。 如果查询有点规律,做个cache层,还行。 一个表就5亿条吗(一天),再考虑300个字段,光在数据库里run sql应该都很慢, 哪怕加了索引
      

  10.   


    mysql有什么  m s模式~不知道能否使用。我在5亿条数据里检索时间大概是30分钟。但是几个sql并发执行的时候比较有问题。目标是10分钟。
      

  11.   

    不知道楼主听说过No SQL型数据库,如MongoDB,像这种10条数据量正好适合