在mySQL中对表进行分区

时间:2012-02-01 20:37:25

标签: php mysql database database-design database-schema

有一个包含300万行的表,并希望对其进行分区。共有5列,其中一列是日期列。我想按日期分开桌子。任何简单的帮助都会很棒。感谢

3 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,有几种方法可以做到这一点:

您可以使用Between关键字按特定日期范围细分。

drop table if exists TableA, TableB;

create table TableA
select * from YourTable
where DateColumn between '2011-07-01' and '2012-02-01';

create table TableB
select * from YourTable
where DateColumn between '2011-01-01' and '2011-06-30';

或者,如果您的细分更简单(例如,您希望按年分解),则可以使用日期函数。

drop table if exists TableA, TableB;

create table TableA
select * from YourTable
where year(DateColumn) = '2011';

create table TableB
select * from YourTable
where year(DateColumn) = '2012';

可能还有更多动态方法可以做到这一点,但我需要了解更多有关您的环境和目标的详细信息。

答案 1 :(得分:0)

分桌子是什么意思?

您可以通过执行insert-select并选择在日期列上执行自我JOIN GROUP BY的现有数据来插入到其他表中。

答案 2 :(得分:0)

您可以在MySQL中使用表分区。步骤是:

  1. 备份你的桌子。

  2. 从数据库中删除表

  3. 运行create table query和partition statement。

    示例:http://dev.mysql.com/tech-resources/articles/partitioning.html

    CREATE TABLE part_tab
    (  
        c1 int default NULL,
        c2 varchar(30) default NULL,
        c3 date default NULL
    ) engine=myisam 
    PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
    PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
    PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
    PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
    PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
    PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
    PARTITION p11 VALUES LESS THAN MAXVALUE );
    
  4. 现在导入表格数据。