mysql分区技术

基本概念

把一个表,从逻辑上分成多个区域,便于存储数据。

采用分区的前提,数据量非常大。

如果数据表的记录非常多,比如达到上亿条,数据表的活性就大大降低,数据表的运行速度就比较慢、效率低下,影响mysql数据库的整体性能,就可以采用分区解决

分区是mysql本身就支持的技术

 

分区算法

list分区

list :条件值为一个数据区。

算法:根据“字段的内容值”是否在某个“区域”中进行分区,通过预定义的列表的值来对数据进行分割。

语法:

利用表选项:partition 完成。

create table  table_name(

       字段信息,

       索引,

) charset utf8

partition by list(分区字段)(

    partition list_name1 values in (),

    partition list_name2 values in()

);

例子:创建一张表,该表保存有全国20家分公司的职员记录,这20家分公司的编号从1到20.而这20家分公司分布在全国4个区域,如下表所示:

id  name   store_id(分公司的id)

北部    1,4,5,6,17,18

南部    2,7,9,10,11,13

东部    3,12,19,20

西部    8,14,15,16

查看执行计划

 

注意:where后面的字段必须是分区字段

 

range分区

定义:利用“字段值”取值范围将数据分区,区间要连续并且不可以重叠,使用VALUES LESS THAN 进行分区定义

less than   小于等于

MAXVALUE  可能的最大值 

例子:用户余额表

create table p_range(
id int(11) NOT NULL,
name varchar(32) NOT NULL,
totle_money int(11) NOT NULL
)
partition by range (totle_money)(
          partition p1 values less than (100),
          partition p2 values less than(1000),
          partition p3 values less than(10000),
          partition p4 values less than MAXVALUE
);

注意:

1,上面分区语句的VALUES LESS THAN MAXVALUE子句是表示当有大于10000的时候都插入到p4中,MAXVALUE代表最大可能整数值,否则当我们插入一条记录包含10001时会报错。

2,顺序是有规定的,当把p1设为1000而p2设为100时会报错。

3,无论是哪一种分区类型,如果表里有主键,则分区字段必须是主键或者主键的一部分,否则会报错。

 A PRIMARY KEY must include all columns in the table's partitioning function

 如果添加主键   alter table p_range add PRIMARY key(id,totle_money)

文件存储信息

 

增加分区

给 range/list 增加分区

alter table table_name add  partition(

           partition 分区名 values less than (常量)

           或

           partition 分区名 in (n,n,n)

 );

删除分区

给 range/list 删除分区

alter table table_name drop partition 分区名称;

注意:删除的分区里的数据会被删除。

posted @   MaxBruce  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示