表分区 partition

来源:转载

当一张表的数据非常多的时候,比如单个.myd文件都达到10G,这时,必然读取起来效率降低.


可不可以把表的数据分开在几张表上?

1:从业务角度可以解决.(分表)


比如,通过id%10,user0,user1....user9,这10张表


根据不同的余数,来插入或查询某张表.

2:通过mysql的分区功能


mysql将会根据指定的规则,把数据放在不同的表文件上.


相当于在文件上,被拆成了小块.


但是,给客户的界面,还是1张表.

常用的规则:


根据某列的范围来分区,也可以某列的散点值来分区.

示例:按列的范围来分区


以用户表为例,uid


uid[1,10)--->userpartitionu0


uid[10,20)--->userpartitionu1


uid[20,MAX]-->userpartionu2

分区按range分区


createtablegoods(


idint,


unamechar(10)


)enginemyisam


partitionbyrange(id)(


partitionp1valueslessthan(10),


partitionp2valueslessthan(20),


partitionp3valueslessthanMAXVALUE


);

按散点值分区


有一张省表



pid主键


prov省名




1


北京




2


安徽




...



35


西藏




user表,想按省来分区,



uid主键


pid省份


uname用户名




1


1


张北京




15


2


赵安徽



createtableuser(


uidint,


pidint,


uname


)enginemyisam


partitionbylist(pid)(


partitionbjvaluesin(1),


partitionahvaluesin(2),


partitionxbvaluesin(4,5,6)


);

注意:在使用分区的时候,注意,分区的那个列,值不要为NULL


(如果不小心为NULL,mysql为理解为0,尽量执行之)

注:分区甚至可以按照表达式的返回值,计算所属区.


但用表达式,不如直接用值来得快.根据情况而定.

比如,用partitionbyrange(year(regtime))可以按注册年份来分区.

分享给朋友:
您可能感兴趣的文章:
随机阅读: