• mysql的分区技术(建立分区)


    --  mysql建立表分区,使用range方法建立;

    create table t_range(
    id int(11),
    money int(11) unsigned not null,
    date datetime
    )partition by range(year(date))
    (
    partition p2007 values less than (2008),
    partition p2008 values less than (2009),
    partition p2009 values less than (2010),
    partition p2010 values less than maxvalue
    );

    --  mysql建立分区,使用list方法建立分区。

    --  对于innodb和myisam引擎,一条语句插入多条记录的时候,如果中间有值不能插入,innodb会全部回滚,myisam在错误值之前的数据可以插入到表中。

    create table cms_list(
    a int(11),
    b int(11)
    )
    partition by list (b)(
    partition p0 values in (1,3,5,7,9),
    partition p1 values in (2,4,6,8,0)
    );

    -- hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。

    create table t_hash(
    a int(11),
    b datetime
    )partition by hash
    (YEAR(b) partitions 4);

    -- hash的分区函数页需要返回一个整数值。partitions子句中的值是一个非负整数,不加的partitions子句的话,默认为分区数为1。

    --  key分区和hash分区相似,不同在于hash分区是用户自定义函数进行分区,key分区使用mysql数据库提供的函数进行分区,NDB cluster使用MD5函数来分区,对于其他存储引擎mysql使用内部的hash函数,这些函数基于password()一样的算法。

    create table cms_key(
    a int(11),
    b datetime
    )
    partition by key (b)
    partitions 4;

    上面的RANGE、LIST、HASH、KEY四种分区中,分区的条件必须是整形,如果不是整形需要通过函数将其转换为整形。

      mysql-5.5开始支持COLUMNS分区,可视为RANGE和LIST分区的进化,COLUMNS分区可以直接使用非整形数据进行分区。COLUMNS分区支持以下数据类型:

      所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。

      日期类型,如DATE和DATETIME。其余日期类型不支持。

      字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。

      COLUMNS可以使用多个列进行分区。

     

    新增分区

    mysql> ALTER TABLE sale_data

        ->   ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

    Query OK, 0 rows affected (0.36 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    删除分区

    --当删除了一个分区,也同时删除了该分区中所有的数据。

    mysql> ALTER TABLE sale_data DROP PARTITION p201010;

    Query OK, 0 rows affected (0.22 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    分区的合并

    下面的SQL,将p201001 - p201009 合并为3个分区p2010Q1 - p2010Q3

    mysql> ALTER TABLE sale_data

        ->   REORGANIZE PARTITION p201001,p201002,p201003,

        ->                        p201004,p201005,p201006,

        ->                        p201007,p201008,p201009 INTO

        -> (

        ->   PARTITION p2010Q1 VALUES LESS THAN (201004),

        ->   PARTITION p2010Q2 VALUES LESS THAN (201007),

        ->   PARTITION p2010Q3 VALUES LESS THAN (201010)

        -> );

    Query OK, 0 rows affected (1.14 sec)

    Records: 0  Duplicates: 0  Warnings: 0

  • 相关阅读:
    随笔53 java存在继承关系的类之间的调用
    Servlet 与 CGI 的比较
    Angularjs导出数据到Excel
    JavaScript获得当前月份起止日期
    const与let
    JS判断浏览器类型及版本号(Web端)
    JSON怎么添加注释
    CSS中的特殊的选择器
    CSS界面友好显示的小技巧
    CSS3使用弹性盒子模型定义布局
  • 原文地址:https://www.cnblogs.com/sand-tiny/p/3594317.html
Copyright © 2020-2023  润新知