一个应用使用的MySQL数据库,几年下来总共有500W+的数据量,现在想把一年前(或按自然年09年前)的数据做个archive,有什么好办法没?Mysql也没有类似oracle的partition的功能。谢谢!

解决方案 »

  1.   

    MYSQL5。1支持分区表
    SHOW VARIABLES LIKE '%partition%';mysql help:
    CREATE TABLE sales1 (
        id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        sales_date DATE NOT NULL DEFAULT '0000-00-00'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    PARTITION BY RANGE(id)
    (
        PARTITION p0 VALUES LESS THAN (5000)
            DATA DIRECTORY='d:/s1/data/'
            INDEX DIRECTORY = 'd:/s1/idx/',    PARTITION p1 VALUES LESS THAN (10000)
            DATA DIRECTORY='e:/s1/data/'
            INDEX DIRECTORY = 'e:/s1/idx/',    PARTITION p1 VALUES LESS THAN MAXVALUE
            DATA DIRECTORY='f:/s1/data/'
            INDEX DIRECTORY = 'f:/s1/idx/'
    );
    注意引擎及分区值的类型
      

  2.   

    MySQL 5.1 起支持 partition 按照年份你可以使用range partition你可以参考一下MYSQL官方文档中的一个例子。
    http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html#partitioning-range
    18.2.1. RANGE分区
    按照RANGE分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义