第7课:表分区

分区表的适用场景:
当表非常大,或者表中有大量的历史记录,而“热数据”却位于表的末尾。
分区与不使用分区相比,能够更好的维护数据。比如,你可以很快的通过删除分区来移除旧数据。你还可以优化、检查、修复个别分区。
分区的数据可以分布导不同的物理磁盘中,使得服务器可以高效的利用多个磁盘。
如果有必要,你可以单独的备份和恢复指定的分区,这对于大数据来说是非常有用处的。

分区表的局限:
每张表最大分区数为1024。
在MySQL 5.1中,分区表达式必须是整型或者表达式返回整型值。在MySQL 5.5中,你可以通过具体某字段值进行分区。
所有的主键或者唯一索引必须被保存在分区表达式中。
不能使用任何外间约束。

表分区类型:
RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区
例子:
    CREATE TABLE employees (  
        id INT NOT NULL,  
        fname VARCHAR(30),  
        lname VARCHAR(30),  
        hired DATE NOT NULL DEFAULT '1970-01-01',  
        separated DATE NOT NULL DEFAULT '9999-12-31',  
        job_code INT,  
        store_id INT  
    )  
      
    PARTITION BY RANGE (YEAR(separated)) (  
        PARTITION p0 VALUES LESS THAN (1991),  
        PARTITION p1 VALUES LESS THAN (1996),  
        PARTITION p2 VALUES LESS THAN (2001),  
        PARTITION p3 VALUES LESS THAN MAXVALUE  
    );
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择
例子:
    CREATE TABLE employees (  
        id INT NOT NULL,  
        fname VARCHAR(30),  
        lname VARCHAR(30),  
        hired DATE NOT NULL DEFAULT '1970-01-01',  
        separated DATE NOT NULL DEFAULT '9999-12-31',  
        job_code INT,  
        store_id INT  
    )  
      
    PARTITION BY LIST(store_id)  
        PARTITION pNorth VALUES IN (3,5,6,9,17),  
        PARTITION pEast VALUES IN (1,2,10,11,19,20),  
        PARTITION pWest VALUES IN (4,12,13,14,18),  
        PARTITION pCentral VALUES IN (7,8,15,16)  
    );
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式
CREATE TABLE employees (  
    id INT NOT NULL,  
    fname VARCHAR(30),  
    lname VARCHAR(30),  
    hired DATE NOT NULL DEFAULT '1970-01-01',  
    separated DATE NOT NULL DEFAULT '9999-12-31',  
    job_code INT,  
    store_id INT  
)  
PARTITION BY LINEAR HASH(YEAR(hired))  
PARTITIONS 4;
KSY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值
CREATE TABLE tk (  
    col1 INT NOT NULL,  
    col2 CHAR(5),  
    col3 DATE  
)  
PARTITION BY LINEAR KEY (col1)  
PARTITIONS 3;
在KEY分区中使用关键字LINEAR和在HASH分区中使用具有同样的作用,分区的编号是通过2的幂(powers-of-two)算法得到,而不是通过模数算法

打赏  如对你有帮助,请我喝杯咖啡吧!