MySQL创建管理LIST分区


Posted in MySQL onApril 13, 2022

介绍

LIST分区和RANGE分区非常的相似,主要区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。二者在语法方面非常的相似。同样建议LIST分区列是非null列,否则插入null值如果枚举列表里面不存在null值会插入失败,这点和其它的分区不一样,RANGE分区会将其作为最小分区值存储,HASH\KEY分为会将其转换成0存储,主要LIST分区只支持整形,非整形字段需要通过函数转换成整形;5.5版本之后可以不需要函数转换使用LIST COLUMN分区支持非整形字段,在COLUMN分区中有详细的讲解。

一、创建分区

List各个分区枚举的值只需要不相同即可,没有固定的顺序。

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);

 

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblist';

MySQL创建管理LIST分区

1.插入数据

insert into tblist(id,store_id) values(1,1),(7,7);

往a、b两个分区中各插入一条记录

MySQL创建管理LIST分区

2.插入不在列表中的值

MySQL创建管理LIST分区

当往分区中插入不在枚举列表中的值是会插入失败,插入null值如果null值不在枚举列表中也同样失败

二、分区管理

1.增加分区

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

注意:不能增加包含现有任意值的分区。

2.合并分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

将分区a,b合并为分区m

注意:同RANGE分区一样,只能合并相邻的几个分区,不能跨分区合并。例如不能合并a,c两个分区,只能通过合并a,b,c

MySQL创建管理LIST分区

3.拆分分区

ALTER TABLE tblist REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

ALTER TABLE tblist REORGANIZE PARTITION  n INTO 
    ( PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (3,9,10));

MySQL创建管理LIST分区

经过两轮的拆分,枚举列表(3,9,10)排到了(2,7,8)的前面去了;其实是这样的,一开始合并abc成nm两个分区由于n中的枚举值小于m所以n在m的前面,后面再拆分n分区由于n分区在m分区的前面所以拆分出来的分区也是排在m分区的前面,由于a分区的值小于b分区的值所以a排在b的前面。

注意:1.在5.7.12版本中测试发现,合并和拆分分区重新定义的枚举值可以不是原来的值,如果原来的枚举值包含了数据而新合并或拆分的分区枚举值又不不包含原来的枚举值会造成数据丢失。虽然不知道为什么mysql不会禁止该行为,但是人为的要求无论是合并还是拆分分区枚举值保持不变,或者只能增加不能减少,这样能保证数据不丢失。

2.合并和拆分后的分区由于是相邻的分区进行合并和拆分会根据原本的分区的值新的分区也会在原本的分区的顺序位置。

4.删除分区

ALTER TABLE tblist DROP PARTITION e;

注意:删除分区同时会将分区中的数据删除,同时枚举的list值也被删除,后面无法往表中插入该值的数据。

三、其它分区

1.对时间字段进行分区

CREATE TABLE listdate (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST( YEAR(hired) ) 
(
    PARTITION a VALUES IN (1990),
    PARTITION b VALUES IN (1991),
    PARTITION c VALUES IN (1992),
    PARTITION d VALUES IN (1993)
);

ALTER TABLE listdate ADD INDEX ix_hired(hired);

INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00');
EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

MySQL创建管理LIST分区

LIST分区也支持对非整形的时间类型字段的转换分区。

四、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

注意:使用remove移除分区是仅仅移除分区的定义,并不会删除数据和drop PARTITION不一样,后者会连同数据一起删除

总结

重新定义LIST分区时只能重新定义相邻的分区,不能跳过分区定义,重新定义的分区列表枚举必须包含原分区的列表枚举,如果丢失某个包含记录的枚举值那么数据也将被删除;重新定义分区不能改变分区的类型。

到此这篇关于MySQL分区之LIST分区的文章就介绍到这了!

MySQL 相关文章推荐
MySQL复制问题的三个参数分析
Apr 07 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
MySQL 数据类型选择原则
May 27 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
MySQL池化框架学习接池自定义
Jul 23 MySQL
MySql分区类型及创建分区的方法
Apr 13 #MySQL
深入理解mysql事务隔离级别和存储引擎
mysql使用 not int 子查询隐含陷阱
Apr 12 #MySQL
MySQL数据库如何使用Shell进行连接
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 #MySQL
MySQL事务操作的四大特性以及并发事务问题
MySql重置root密码 --skip-grant-tables
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python模块导入的方法
2019/10/24 Python
利用python实现汉诺塔游戏
2021/03/01 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
介绍一下Python中webbrowser的用法
2013/05/07 面试题
中专三年学习的个人自我评价
2013/12/12 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
廉洁自律承诺书
2014/03/27 职场文书
大学生就业策划书范文
2014/04/04 职场文书
舞蹈专业求职信
2014/06/13 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
文员岗位职责范本
2015/04/16 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
html5表单的required属性使用
2021/07/07 HTML / CSS