• 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

  • 相关阅读:
    Unix domain sockets
    python异常处理
    php注册登录源代码
    div,css命名规范!
    html、css和js注释的规范用法
    PHPstrom的Disable Power Save Mode
    开通了博客园
    O(1)时间删除链表中的节点 13
    打印1到最大的n位数 12
    自己实现一个数的整数次方 11
  • 原文地址:https://www.cnblogs.com/sand-tiny/p/3594317.html
Copyright © 2020-2023  润新知