mysql分区

以前一直想到大数据优化是分库分表,但分库分表需要自己在代码中来逻辑判断,即既要实现逻辑分库分表,又要实现物理分库分表。mysql的分区就是为了解决这个问题的。直接在物理上实现分表,但是在代码逻辑上好像就是一个表样,不需要额外通过代码判断.

分区有四种,而我们常用到的就是三种:range,list,hash.当然还有key.其中又以range和list最常用,list其实是range的一个特例

1.hash:主要是测试用,将表平均分成几个表。

2.list:主要是针对对应字段的枚举来分区:比如:年级在一年级和二年级为一个区,三年级,四年级和五年级又分到一个区

3.range主要是根据给定区间来分区,比如id<10000为一个区,10000到20000为一个区。

eg:

a.range:

create table t(id int,birth DATE NOT NULL DEFAULT '1970-01-01')partition by range(YEAR(birth))(

    partition p0 values less than (1991),

    partition p1 values less than (2000),

    partition p2 values less than (2001),

    partition p0 values less than maxvalue 

)

b.list:

create table t(id int,store_id int)partition by list(store_id)(

    partition p0 values in (1,3),

    partition p1 values in (2),

    partition p2 values in(5,9)

)

c.hash:

create table t(id int,birth DATE NOT NULL DEFAULT '1970-01-01')partition by hash(id) partitions 4;

这样就实现了在物理上把一张很大的表分成了几个区。逻辑上还是查一个表。但实际上,比如range,在查询的时候,如果条件满足,就直接查其中的一个分区,而这个分区的数据肯定没有原表那么大。达到提速的要求。

最后注意的是,innodb默认是共享表空间的,所以要对innodb执行分区的化,要在配置文件里,把innodb_file_per_table=1这样,innodb就变成了独立表空间,可以正常分区了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值