Mysql分区 - List分区

本文详细介绍了MySQL数据库的五种分区模式:Range、Hash、Key、List和Composite,以及它们的应用场景。通过实例展示了如何创建、删除、添加和重组分区。强调了分区对查询性能的提升,并提醒在删除分区时数据也会被删除。最后讨论了分区在大数据量场景下的优势。
摘要由CSDN通过智能技术生成

1、Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980’s)的数据,90年代(1990’s)的数据以及任何在2000年(包括2000年)后的数据。
2、Hash(哈希) – 这种模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如DBA可以建立一个对表主键进行分区的表。
3、Key(键值) – Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
4、List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。
5、Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。

结论

  • 分区和未分区占用文件空间大致相同 (数据和索引文件)
  • 如果查询语句中有未建立索引字段,分区时间远远优于未分区时间
  • 如果查询语句中字段建立了索引,分区和未分区的差别缩小,分区略优于未分区。
  • 对于大数据量,建议使用分区功能。
  • 去除不必要的字段
  • 根据手册, 增加myisam_max_sort_file_size 会增加分区性能( mysql重建索引时允许使用的临时文件最大大小)

一、LIST分区

1、列表分区在许多方面类似于范围分区。与按范围分区一样,每个分区都必须明确定义。这两种类型的分区之间的主要区别在于,在列表分区中,每个分区都是基于一组值列表中的一个列值的成员身份来定义和选择的,而不是在一组连续的值范围中的一个列值。这是通过使用按列表分区(expr)来实现的,其中expr是一个列值或基于列值的表达式并返回一个整数值,然后通过(value_LIST)中的值定义每个分区,其中value_LIST是一个逗号分隔的整数列表。

2、当且仅当一个分区是使用包含NULL的值列表定义的时,按LIST分区的表才允许NULL值。与此相反的是,按列表分区的表在值列表中未显式使用NULL,它拒绝了导致分区表达式为NULL值的行

1、创建分区

CREATE TABLE `tesc`.`list_test`  (
  `id` int NULL,
  `name` varchar(255) NULL,
  `date` datetime NULL 
)
PARTITION BY LIST (year(date)) (
	PARTITION p0 VALUES IN (1995,1999,2003,2007),
	PARTITION p1 VALUES IN (1996,2000,2004,2008),
	PARTITION p2 VALUES IN (1997,2001,2005,2009),
	PARTITION p3 VALUES IN (1998,2002,2006,2010)
);

p0:指分区p0,这个分区名的取值可以随便取值只要同一个表里面的每个分区名不重复即可,也不需要非得从0开始,你也可以使用a、b、c、d。

插入测试数据

insert into list_test(id,`name`,date) values(1,'zhangsan','1995-09-02'),(2,'lisi','2000-09-02'),(3,'wangwu','2001-09-02'),(4,'liuliu','2006-09-02');

在这里插入图片描述

2、删除分区

ALTER TABLE list_test DROP PARTITION p0;

注意:通过这种删除分区的方式会将分区中的数据也删除,慎用!!!!。但是通过删除分区的方式删除数据会比delete快很多,因为它相当于删除一个数据库一样因为每个分区都是一个独立的数据文件。用来删除历史分区数据是非常好的办法。
在这里插入图片描述

3、增加分区

ALTER TABLE list_test ADD PARTITION ( PARTITION p0 VALUES IN (1995,1999,2003,2007) );

注意:增加分区只能在最大端增加

4、拆分合并分区

无论是拆分还是合并分区都不能改变分区原本的覆盖范围,并且合并分区只能合并连续的分区不能跳过分区合并;并且不能改变分区的类型,例如不能把list分区改成key分区等。

拆分合并分区统称为重新定义分区,拆分分为不会造成数据的丢失,只将会将数据从一个分区移动到另一个分区。

原分区
在这里插入图片描述

1、将p1、p2合并成p1

ALTER TABLE list_test REORGANIZE PARTITION p1,p2 
INTO (
	PARTITION p1 VALUES IN (1996,2000,2004,2008,1997,2001,2005,2009)
);

在这里插入图片描述

2、将p1拆分成p1、p2

ALTER TABLE list_test REORGANIZE PARTITION p1
INTO (
	PARTITION p1 VALUES IN (1996,2000,2004,2008),
	PARTITION p2 VALUES IN (1997,2001,2005,2009)
);

在这里插入图片描述

5、移除表的分区

ALTER TABLE list_test REMOVE PARTITIONING ;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值