mysql表分区 partition

本文介绍了MySQL中表分区的概念及其应用场景,包括如何通过业务角度或MySQL自带的分区功能进行表数据的分割,以提高数据处理效率。同时,文章还提供了具体的分区示例,如按ID范围和按省列表进行分区的方法。
复制代码
表分区 partition
当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.
可不可以把表的数据分开在几张表上?

1: 从业务角度可以解决.. (分表,水平分割),比如, 通过id%10 , user0 , user1....user9, 这10张表 根据不同的余数,来插入或查询某张表.

2: 通过mysql的分区功能,而不是通过代码来控制,再建表的时候指定分区的规则,mysql将会根据指定的规则,把数据放在不同的表文件上,相当于在文件上,被拆成了小块.但是,给客户的界面,还是1张表.对用户来说是透明的。

常用的规则:一般是根据某列的范围来分区, 也可以某列的散点值来分区.

示例: 按列的范围来分区
以用户表为例, uid
uid [1,100万)  ---> user partition u0 放在第一张表里
uid[100万, 200万) ---> user partition u1 放在第二张表里
uid [200万, MAX] --> user partion u2  放在第三张表里
复制代码
复制代码
分区 按range范围分区,根据id的范围来分区,
 create table goods (
 id int,
 uname char(10)
 )engine myisam
 partition by range(id) (
 partition p1 values less than (10),                  //id小于10的在一个区域
 partition p2 values less than (20),                  //id小于20的在一个区域
 partition p3 values less than MAXVALUE       //其他在p3
 );
复制代码

复制代码
按散点值分区
有一张省表
create table area(
aid int,
zone char(10)
)engine myisam;

insert into area values (1,’bj’),(2,’ah’),(3,’xb’);
复制代码

pid 主键

prov 省名

1

北京

2

安徽

...

 

35

西藏

 

user ,按省来拆分,

uid 主键

pid 省份

uname 用户名

1

1

张北京

15

2

赵安徽

 

 

 
复制代码
create table user (
uid int,
aid int,
uname char(10)
)engine myisam
partition by list(aid) (
partition bj values in (1),
partition ah values in (2),
partition xb values in (4,5,6)
);
//7是没有的区,会报错。
insert into user values (1,1,’11’),(2,2,’22’),(3,4,’44’),(4,5,’55’),(5,6,’66’),(6,7,’77’);
复制代码

复制代码
注意: 在使用分区的时候,注意,分区的那个列,值不要为NULL 
(如果不小心为NULL,mysql为理解为0,尽量执行之)


注 :分区甚至可以按照表达式的返回值,计算所属区. 
但用表达式,不如直接用值来得快. 根据情况而定.

比如,用 partition by range (year(regtime)) 可以按注册年份来分区.
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8301816.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值