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';

 1.插入数据

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

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

2.插入不在列表中的值

当往分区中插入不在枚举列表中的值是会插入失败,插入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

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));

经过两轮的拆分,枚举列表(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';

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

四、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

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

参考: 

RANGE分区:http://www.cnblogs.com/chenmh/p/5627912.html

COLUMN分区:http://www.cnblogs.com/chenmh/p/5630834.html

HASH分区:http://www.cnblogs.com/chenmh/p/5644496.html

KEY分区:http://www.cnblogs.com/chenmh/p/5647210.html

子分区:http://www.cnblogs.com/chenmh/p/5649447.html

指定各分区路径:http://www.cnblogs.com/chenmh/p/5644713.html

分区索引:http://www.cnblogs.com/chenmh/p/5761995.html

分区介绍总结:http://www.cnblogs.com/chenmh/p/5623474.html

总结

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

转载于:https://www.cnblogs.com/fanxiumin/p/6034194.html

MySQL LIST分区(转载)相关推荐

  1. Mysql表分区的选择与实践小结

    2019独角兽企业重金招聘Python工程师标准>>> 在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表, ...

  2. MySQL水平分区代理Spock Proxy(一)

    为什么80%的码农都做不了架构师?>>>    MySQL水平分区代理Spock Proxy 水平分区(sharding)将同一数据表中的数据通过特定的算法进行分离,分别保存在不同的 ...

  3. 处理Zabbix历史数据库办法二---使用MySQL表分区

    一 应用场景描述 http://john88wang.blog.51cto.com/2165294/1770582 在前面介绍可以通过创建新表然后导入一个月内的数据到新表,最后删除旧表的方法来处理历史 ...

  4. mysql表分区、查看分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  5. mysql 添加分区_创建,增加,删除mysql表分区

    1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no      INT NOT NULL, title        ...

  6. mysql 不同分区 同时insert_一文看懂mysql数据库分区表概念、类型、适用场景、优缺点及原理...

    概述 最近对项目上部分表按时间做了分区,所以顺便整理下mysql分区表的一些内容,仅供参考. 一.分区表概念 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分, ...

  7. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

  8. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...

  9. mysql 分区表优化_Sql优化之Mysql表分区

    一  分区表适用于以下场景 1:表非常大以至于无法全部放在内存中,或者只在标的最后部分有热点数据,其他均是历史数据 2:分区表的数据更容易维护.例如想批量删除大量数据可以使用清除整个分区的方式.另外还 ...

  10. mysql 配置分区_Mysql的分区配置实验

    /** *mysql 数据分区实验 *@auther:luowen *@time:2013-07-26*/ //1.创建分区表 /*分区类型 1.range分区(按照一段区间分区) 2.list分区( ...

最新文章

  1. 感光电路板制作(转收藏)
  2. 3天html自学教程,html自学教程(八)html5基础
  3. 下一代微服务!ServiceMesh的2018年度总结 | 万字雄文
  4. python2/3 中删除字典中value为空的键值对方法
  5. 仪表自定义刻度值_史上最全的仪表选型,就差你还没看了
  6. kbmMW功能 - kbmMWProcess单元(转帖)
  7. mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL
  8. HTML5移动端音乐播放器(启蒙篇)
  9. Linux 操作系统开篇!
  10. C语言与汇编“硬在哪里”——什么是面向硬件?
  11. Centos7下yum安装GlusterFS方法
  12. 我是如何用CSS绘制各种形状的
  13. Bitvise SSH Server超过登录失败次数锁定IP配置
  14. 天池风控算法大赛来了!
  15. dns域名解析原理及过程
  16. 搭建静态的响应式个人官网
  17. 台式机连接蓝牙音响没声音 以及 声音延迟 问题解决
  18. 假设一张纸足够大并且可以无限折叠,假设一张纸足够大并且可以无限折叠,一张纸的厚度是0.5mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度8848.43m。
  19. 秃头警告之——使用mondo rescue备份linux系统ISO镜像的踩坑历程
  20. DIY官网可视化工具打造低代码可视化一键生成导出源码工具

热门文章

  1. delphi中TStringGrid数据的导出
  2. Silverlight:使用Storyboard控制动画--控制动画事件交互
  3. 例子:好友列表选中效果
  4. SaltStack源码分析之:master端执行salt模块大致流程
  5. 【qt】QT 的信号与槽机制
  6. Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
  7. 为什么防火墙透传不过去VLAN11?
  8. bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次
  9. 分布与并行计算—生产者消费者模型实现(Java)
  10. leetcode剑指 Offer 63. 股票的最大利润(动态规划)