请问高手mysql如何对现有表进行日期的分区,我现在有一张表已经很大了,因每天都要查昨天的记录,所以感觉很慢,请问可不可以在现有的表做分区啊,按照日期,具体的操作是怎么样的呢。在线等高手指点。

解决方案 »

  1.   

    可以参考一下官方文档中的例子。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值的方式
      

  2.   

    是可以的,不过你得首先确定你要分区的周期是什么?日?周?月?年?可以用类似下面的一些函数:
    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>