【问题标题】:Partition a table in mySQL在 mySQL 中对表进行分区
【发布时间】:2012-02-01 20:37:24
【问题描述】:
有一个包含 300 万行的表,并且想要对它进行分区。有 5 列,其中之一是日期列。我想按日期拆分表格。任何简单的帮助都会很棒。谢谢
【问题讨论】:
标签:
php
mysql
database
database-design
database-schema
【解决方案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';
可能还有更动态的方法可以做到这一点,但我需要了解您的环境和目标的更多细节。
【解决方案2】:
拆分表是什么意思?
您可以通过执行插入选择并选择现有数据在日期列上执行自我 JOIN GROUP BY 来插入其他表。
【解决方案3】:
您可以在 MySQL 中使用表分区。步骤是:
备份您的表。
从数据库中删除表
-
将创建表查询与分区语句一起运行。
示例: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 );
现在导入表的数据。