1.一个表字段10多个,里面的数据量可能上千万条,设计这个表的时候要考虑些什么?
2.就是上面设计的这个表,每天都会插入上千万条数据,为了避免里面的数据量太大了,
会根据日期字段删除昨天以前的数据,由于数据量很大,删要很长时间,而且随时都有insert操作,应该怎么来删?

解决方案 »

  1.   

    設計一個batch job在晚上DB空閒時做刪除吧
      

  2.   

    很夸张的表,类似这种业务很少,这种做分区表吧,楼主。按照你的数据量,按照小时分区都有点大,不过也没办法,特殊问题特殊对待;楼主可以再找一下,你经常查询的字段是哪一个,如:业务类别什么的。然后将它作为二级分区,查询数据应当保证分区字段作为WHERE条件,并且尽量保证查询数据在一个分区或相两三个分区。在分区基础上创建分区索引,这个需要创建分区时进行编译,所以可以编写过程动态执行。对于你说的删除数据,如果你的数据是今天的,那么数据删除就是将分区交换出去,做分区交换操作,将外部空的对应表与其交换,这个是瞬间完成,和数据量无关,然后将外部表TRUNCATE掉,然后再和你下一个需要交换的分区交换(你也可以建立一天24小时的对应24个空表,直接将一天的分区全部交换出去),然后这24个分区就全部是空分区,那么此时将24个分区全部删除掉即可完成。关于分区表和分区索引的常规操作,个人博客中有一些介绍,如果可以的话,可以参考下。付:如果以前的表不是分区表,是不可以直接改成分区表的,必须停止外部应用后,将数据先转出去,然后删除掉这个表,然后创建同结构的分区表后,再将数据转回来才可以。
      

  3.   

    1.一个表字段10多个,里面的数据量可能上千万条,设计这个表的时候要考虑些什么?
    见表的 时候根据 业务的特性 考虑表分区
    在经常 做查询的列上建索引 2.就是上面设计的这个表,每天都会插入上千万条数据,为了避免里面的数据量太大了,
    会根据日期字段删除昨天以前的数据,由于数据量很大,删要很长时间,而且随时都有insert操作,应该怎么来删?
    每天插入数据 可以 按照每天 来进行分区  数据插入当天的分区表里
    删除的话 直接TRUNCATE partition  
    如果经常插入的话 索引需要维护了