[Mysql]Mysql分区笔记

来源:互联网 发布:二手手机估价软件 编辑:程序博客网 时间:2024/05/18 03:53
Mysql分区笔记


2 range分区 基于列值的分区(水平分区) less than 小于这个值得 建立


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
);
必须按顺序 写less than


3RANGE分区在如下场合特别有用:


·         当需要删除“旧的”数据时。如果你使用上面最近的那个例子给出的分区方案,你只需简单地使用 “ALTER TABLE employees DROP PARTITION p0;”
想要使用一个包含有日期或时间值,或包含有从一些其他级数开始增长的值的列。
经常运行直接依赖于用于分割表的列的查询。例如,当执行一个如“SELECT COUNT(*) FROM employees WHERE YEAR(separated) = 2000 GROUP BY store_id;”这样的查询时,MySQL可以很迅速地确定只有分区p2需要扫描,这是因为余下的分区不可能包含有符合该WHERE子句的任何记录


4LIST分区 同range分区一致 区别在于 list通过值得聚合 range通过连续区间的值


5CREATE 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分区
6CREATE 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 HASH(store_id)
PARTITIONS 4;
按照store_id字段分成四区 
如果没有包括一个PARTITIONS子句,那么分区的数量将默认为1


7 例如,也许你想基于雇用雇员的年份来进行分区。这可以通过下面的语句来实现: 


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 HASH(YEAR(hired))
PARTITIONS 4;
8 PARTITION BY (expr) 其中“expr”是一个返回一个整数的表达式。它可以仅仅是字段类型为MySQL 整型的一列的名字 每当插入或更新(或者可能删除)一行,这个表达式都要计算一次;


18.2.5. 子分区
子分区是分区表中每个分区的再次分割。例如,考虑下面的CREATE TABLE 语句: 


CREATE TABLE ts (id INT, purchased DATE)
    PARTITION BY RANGE(YEAR(purchased))
    SUBPARTITION BY HASH(TO_DAYS(purchased))
    SUBPARTITIONS 2
    (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
    );
每个分区必须有相同数量的子分区


分区单独的
DATA DIRECTORY = '/disk0/data' 
                INDEX DIRECTORY = '/disk0/idx',
分区管理MySQL 5.1 提供了许多修改分区表的方式。添加、删除、重新定义、合并或拆分已经存在的分区是可能的。所有这些操作都可以通过使用ALTER TABLE


删除 ALTER TABLE tr DROP PARTITION p2;


添加高级 分区 ALTER TABLE ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));




不丢失数据情况下 移动分区ALTER TABLE members REORGANIZE PARTITION p0 INTO (
    PARTITION s0 VALUES LESS THAN (1960),
    PARTITION s1 VALUES LESS THAN (1970)
);


合并分区ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO (
    PARTITION p0 VALUES LESS THAN (1970)
);


查看某表的分区 SHOW CREATE TABLE trb3\G




  SHOW PARTITIONS 查看分区


SHOW PARTITION STATUS  分区详细状态
原创粉丝点击