mysql partition

part 1:  需求

很多时候,如果一个表的数据足够大的时候,操作(query,insert) 的效率就会降低。此时将一个表分区就变得必要


part 2: 帮助信息

url 1: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

# mysql 官方文档,讲解mysql partition 

url 2: http://dev.mysql.com/doc/refman/5.1/en/alter-table-partition-operations.html

# mysql官方文档,讲解mysqll 修改分区

url 3: http://www.jzxue.com/shujuku/mysql/200912/24-3297.html

or  http://www.jz123.cn/text/0826274.html 

# 如果英文或是耐心不是太差,看url 1 和 url 2 的英文文档再加上测试就足够了。这里的中文文档也挺好的,可以看一下。


part 3: 概要讲解 & 应用举例

1:mysql partition 的类型主要有 range, list, hash, key 四种, 具体的语法结构和示例如下:

type 1: 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 NOT NULL,
    store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN (21),

    PARTITION p3 VALUES LESS THAN MAXVALUE

);


type 2: 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)
);


type 3: hash

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;

type 4: key

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;


2:mysql 子分区

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
    );


3: mysql 添加分区

mysql>alter table T_LOCATION add partition (partition p2012_09_01 values less than (TO_DAYS('2012-09-1'))); 


4: mysql 删除分区

mysql>alter table T_LOCATION_days drop partition p2012_09_01 ;

#NOTE: hash 分区中有 coalesce 分区


5: mysql 修改分区

mysql> alter table T_LOCATION reorganize partition p2012_09_01 into  (partition p2012_10_01 values less than (TO_DAYS('2012-10-1')));
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0


7: 查看分区信息

mysql> select   TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH  
 from  INFORMATION_SCHEMA.PARTITIONS  
where TABLE_SCHEMA = 'LN_PABB' ;


8: 显示query 涉及的分区

mysql> explain partitions select count(*) from T_LOCATION_days  where timestamp  =   '2010-05-05' \G;  -- and timestamp < '2010-07-27'  \G;


part 4: 常见问题

#todo


part 5: 规律总结

#todo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值