MySQL分区
来源:互联网 发布:商陆花软件价格 编辑:程序博客网 时间:2024/06/05 09:21
创建分区
1)key:按照某个字段取余
create table partition_1( id int primary key auto_increment, title varchar(255) not null default '')engine innodb charset utf8-- key(EXPR)-- EXPR: 某列或者多列的一个列表,哈希函数由 MySQL 提供partition by key(id) partitions 5; --5个分区
create table user_hash( id int not null auto_increment, birthday date, primary key(id,birthday) -- 复合主键, 分区字段必须为主键的一部分)engine innodb charset utf8-- hash (EXPR)-- EXPR: 某个列值或者表达式partition by hash( month(birthday) ) partitions 12;
注意:
1) key, hash 都是取余算法,要求分区参数返回的数据必须为整数2) 对于所有的分区算法,参与分区的字段需要为主键的一部分
3) 不推荐使用涉及到多列的哈希表达式
3)list:散列的值
create table user_list( id int auto_increment, name varchar(255) default '', sex tinyint default 0, -- 0 man, 1 woman, 2 other primary key(id,sex))engine innodb charset utf8-- partition by list(EXPR)-- EXPR: 某列值或者基于某个列值、并返回一个整数值的表达式partition by list(sex)( -- partition NAME values in(VALUE_LIST) -- NAME: 分区名 -- VALUE_LIST: 通过逗号分隔的整数列表 partition user_man values in(0), partition user_woman values in(1), partition user_other values in(2));
4)range:范围区间
create table user_range( id int not null auto_increment, name varchar(255) default '', birthday date, primary key(id,birthday))engine innodb charset utf8-- partition by range( EXPR )-- EXPR: 某列值或者基于某个列值、并返回一个整数值的表达式partition by range( year(birthday) )( -- partition NAME values less than (VALUE) -- NAME: 分区名 partition user_70 values less than (1980), partition user_80 values less than (1990), partition user_90 values less than (2000), partition user_00 values less than MAXVALUE);
注意:InnoDB 类型的表,需要使用独立表空间,设置参数
innodb_file_per_table=1
分区管理
1)对于 key,hash 算法
-- 增加alter table TBL_NAME ADD partition partitions 15;-- 15为增加分区后的总分区数量,不是要增加的分区数-- 减少alter table TBL_NAME coalesce partition 7;-- 7为减少分区后的总分区数了,不是要减少的分区数
2)对于 list,range 算法
-- 添加 alter table TBL_NAME ADD partition ( partition PARTITION_NAME values less than (NUM) );-- 删除 alter table TBL_NAME DROP partition PARTITION_NAME; 注意: 删除分区,将同时删除该分区中的所有数据
查看 MySQL 是否支持分区
show variables like '%partition%';
其它分表方式
1. 人为分表
水平分表
和MySQL分区类似,只是改为人为的控制数据存储在哪张表可以使用MySQL中间件
垂直分表
将一个表中的常用字段和不常用字段分到两张表中,主表+辅表
eg: student_base --常用字段, sutdent_extra --不常用字段
2. MySQL的 mrg_myisam 引擎
0 0
- MySQL分区--列表分区
- MySQL分区--列分区
- Mysql分区?
- mysql分区
- mysql分区
- MySQL分区
- mysql分区
- MYSQL分区
- mysql 分区
- Mysql分区
- mysql分区
- MySQL分区
- Mysql 分区
- Mysql分区
- mysql分区
- mysql分区
- MySQL分区
- mysql分区
- C语言预处理指令整理
- Android在一个TextView设置不同样式的文字
- 我只是想使用一下微软在线文档
- POJ 3723 - Conscription(最大生成树)
- 【Flask】关于Flask的request属性
- MySQL分区
- 使用Spring MVC统一异常处理实战
- 十一月十日杂记
- centos 7 yum安装 nginx
- Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
- linux之sed用法
- [CF5C]Longest Regular Bracket Sequence
- Coursera Machine Learning 第三周 quiz Regularization
- 关于WIN7 64位系统下Cadence16.6中OrCAD Capture CIS导网表出现ERROR无效指针的解决办法