mysql如何对现有表进行日期的分区 请问高手mysql如何对现有表进行日期的分区,我现在有一张表已经很大了,因每天都要查昨天的记录,所以感觉很慢,请问可不可以在现有的表做分区啊,按照日期,具体的操作是怎么样的呢。在线等高手指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以参考一下官方文档中的例子。http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html18. 分区18.1. MySQL中的分区概述18.2. 分区类型18.2.1. RANGE分区18.2.2. LIST分区18.2.3. HASH分区18.2.4. KEY分区18.2.5. 子分区18.2.6. MySQL分区处理NULL值的方式 是可以的,不过你得首先确定你要分区的周期是什么?日?周?月?年?可以用类似下面的一些函数:select year(now());select month(now());select weekofyear(now());select yearweek(now());select to_days(now());示例:mysql> create table tb_test_dt(id int,memo varchar(20),input_time datetime);Query OK, 0 rows affected (0.08 sec)mysql> alter table tb_test_dt -> partition by range(yearweek(input_time)) -> ( -> partition p1 values less than (200920), -> partition p2 values less than (200925), -> partition p3 values less than (200930), -> partition p4 values less than maxvalue -> );Query OK, 0 rows affected (0.33 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> show create table tb_test_dt \G*************************** 1. row *************************** Table: tb_test_dtCreate Table: CREATE TABLE `tb_test_dt` ( `id` int(11) DEFAULT NULL, `memo` varchar(20) DEFAULT NULL, `input_time` datetime DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (yearweek(input_time))(PARTITION p1 VALUES LESS THAN (200920) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (200925) ENGINE = InnoDB, PARTITION p3 VALUES LESS THAN (200930) ENGINE = InnoDB, PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */1 row in set (0.02 sec)mysql> Mysql 索引 Mysql初学的问题? mysql 数据延时问题 select语句中sum的问题 菜鸟求助,关于数据的查询的SQL,急求~~ 求教一个MYSQL的问题,急! 将表table_a中的字段fieldA、fieldB、fieldC的内容写入table_B中字段fieldA、fieldB、fieldC,应该怎样写?? 声明一个变量,function 错, procudere 对,为什么 求推荐一本mysql集群、分片的书 删除mysql中data目录下的日志文件,会让你崩溃? 关于MySql列别名做查询条件的问题 关于mysql求交集
18.1. MySQL中的分区概述
18.2. 分区类型
18.2.1. RANGE分区
18.2.2. LIST分区
18.2.3. HASH分区
18.2.4. KEY分区
18.2.5. 子分区
18.2.6. MySQL分区处理NULL值的方式
select year(now());
select month(now());
select weekofyear(now());
select yearweek(now());
select to_days(now());示例:mysql> create table tb_test_dt(id int,memo varchar(20),input_time datetime);
Query OK, 0 rows affected (0.08 sec)mysql> alter table tb_test_dt
-> partition by range(yearweek(input_time))
-> (
-> partition p1 values less than (200920),
-> partition p2 values less than (200925),
-> partition p3 values less than (200930),
-> partition p4 values less than maxvalue
-> );
Query OK, 0 rows affected (0.33 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> show create table tb_test_dt \G
*************************** 1. row ***************************
Table: tb_test_dt
Create Table: CREATE TABLE `tb_test_dt` (
`id` int(11) DEFAULT NULL,
`memo` varchar(20) DEFAULT NULL,
`input_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (yearweek(input_time))
(PARTITION p1 VALUES LESS THAN (200920) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (200925) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (200930) ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
1 row in set (0.02 sec)mysql>