公司数据库在建表的时候没有分区,现在想采用分区的办法提升效率,请问前辈门:可不可以在未分区表的基础上升级为分区表~而不变动内部的数据?  还有大家对mysql 表分区功能有什么评价?

解决方案 »

  1.   

    第18章:分区
    目录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值的方式
    18.3. 分区管理
    18.3.1. RANGE和LIST分区的管理
    18.3.2. HASH和KEY分区的管理
    18.3.3. 分区维护
    18.3.4. 获取关于分区的信息你重新建立一个新表(分区好),再把未分区的表的数据导进去;
    分区简单,容易管理,速度感觉没多少提升;
      

  2.   

    你可以直接ALTER TABLE把现在的表改为分区表啊。
      

  3.   

    对,这个就是我最想要的, 可不可以给我写个简单的例子?将未分区表直接alter成一个分区表
      

  4.   

    例子:
    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>