表的记录很大,有上千万,我想按照月份进行分期,不知道怎么去实现自动按月份分区

解决方案 »

  1.   

    给你个例子:
    mysql> CREATE TABLE part_date3
        ->      (  c1 int default NULL,
        ->  c2 varchar(30) default NULL,
        ->  c3 date default NULL) engine=myisam
        ->      partition by range (to_days(c3))
        -> (PARTITION p0 VALUES LESS THAN (to_days('1995-01-01')),
        -> PARTITION p1 VALUES LESS THAN (to_days('1996-01-01')) ,
        -> PARTITION p2 VALUES LESS THAN (to_days('1997-01-01')) ,
        -> PARTITION p3 VALUES LESS THAN (to_days('1998-01-01')) ,
        -> PARTITION p4 VALUES LESS THAN (to_days('1999-01-01')) ,
        -> PARTITION p5 VALUES LESS THAN (to_days('2000-01-01')) ,
        -> PARTITION p6 VALUES LESS THAN (to_days('2001-01-01')) ,
        -> PARTITION p7 VALUES LESS THAN (to_days('2002-01-01')) ,
        -> PARTITION p8 VALUES LESS THAN (to_days('2003-01-01')) ,
        -> PARTITION p9 VALUES LESS THAN (to_days('2004-01-01')) ,
        -> PARTITION p10 VALUES LESS THAN (to_days('2010-01-01')),
        -> PARTITION p11 VALUES LESS THAN MAXVALUE );mysql优化器支持以下两种内置的日期函数进行分区:TO_DAYS() 
    YEAR() 
      

  2.   

    mysql> CREATE TABLE members (
        ->     firstname VARCHAR(25) NOT NULL,
        ->     lastname VARCHAR(25) NOT NULL,
        ->     username VARCHAR(16) NOT NULL,
        ->     email VARCHAR(35),
        ->     joined DATE NOT NULL
        -> )
        -> PARTITION BY RANGE( YEAR(joined)*100+MONTH(joined) ) (
        ->     PARTITION p0 VALUES LESS THAN (201001),
        ->     PARTITION p1 VALUES LESS THAN (201002),
        ->     PARTITION p2 VALUES LESS THAN (201003),
        ->     PARTITION p3 VALUES LESS THAN (201004),
        ->     PARTITION p4 VALUES LESS THAN MAXVALUE
        -> );
    Query OK, 0 rows affected (0.25 sec)mysql>