有一个包含300万行的表,并希望对其进行分区。共有5列,其中一列是日期列。我想按日期分开桌子。任何简单的帮助都会很棒。感谢
答案 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中使用表分区。步骤是:
备份你的桌子。
从数据库中删除表
运行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 );
现在导入表格数据。