表分区 partition
表分区 partition
雨落屋檐下 发表于9个月前
表分区 partition
  • 发表于 9个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 表分区 partition

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

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

 

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

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

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

 

2: 通过mysql的分区功能

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

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

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

 

常用的规则:

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

 

示例: 按列的范围来分区

以用户表为例, uid

uid [1,10)  ---> user partition u0

uid[10, 20) ---> user partition u1

uid [20, MAX] --> user partion u2

 

分区 按range分区

 create table goods (

 id int,

 uname char(10)

 )engine myisam

 partition by range(id) (

 partition p1 values less than (10),

 partition p2 values less than (20),

 partition p3 values less than MAXVALUE

 );

 

按散点值分区

有一张省表

pid 主键

prov 省名

1

北京

2

安徽

...

 

35

西藏

 

user 表,想按省来分区,

uid 主键

pid 省份

uname 用户名

1

1

张北京

15

2

赵安徽

create table user (

uid int,

pid int,

uname 

)engine myisam

partition by list(pid) (

partition bj values in (1),

partition ah values in (2),

partition xb values in (4,5,6)

);

 

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

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

 

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

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

 

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 16
码字总数 21043
×
雨落屋檐下
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: