add partition mysql_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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值