时间:2021-05-23
前言:
分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。本篇文章给大家带来的内容是关于MySQL中分区表的介绍及使用场景,有需要的朋友可以参考一下,希望对你有所帮助。
1.分区的目的及分区类型
MySQL在创建表的时候可以通过使用PARTITION BY子句定义每个分区存放的数据。在执行查询的时候,优化器根据分区定义过滤那些没有我们需要的数据的分区,这样查询就可以无需扫描所有分区,只需要查找包含需要数据的分区即可。
分区的另一个目的是将数据按照一个较粗的粒度分别存放在不同的表中。这样做可以将相关的数据存放在一起,另外,当我们想要一次批量删除整个分区的数据也会变得很方便。
下面简单介绍下四种常见的分区类型:
上述四种分区类型中,RANGE分区 即范围分区是最常用的。RANGE分区的特点是多个分区的范围要连续,但是不能重叠,默认情况下使用VALUES LESS THAN属性,即每个分区不包括指定的那个值。
2.分区操作示例
本节内容以RANGE分区为例,介绍下分区表相关的操作。
# 创建分区表mysql> CREATE TABLE `tr` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 -> PARTITION BY RANGE( YEAR(purchased) ) ( -> PARTITION p0 VALUES LESS THAN (1990), -> PARTITION p1 VALUES LESS THAN (1995), -> PARTITION p2 VALUES LESS THAN (2000), -> PARTITION p3 VALUES LESS THAN (2005), -> PARTITION p4 VALUES LESS THAN (2010), -> PARTITION p5 VALUES LESS THAN (2015) -> );Query OK, 0 rows affected (0.28 sec)# 插入数据mysql> INSERT INTO `tr` VALUES -> (1, 'desk organiser', '2003-10-15'), -> (2, 'alarm clock', '1997-11-05'), -> (3, 'chair', '2009-03-10'), -> (4, 'bookcase', '1989-01-10'), -> (5, 'exercise bike', '2014-05-09'), -> (6, 'sofa', '1987-06-05'), -> (7, 'espresso maker', '2011-11-22'), -> (8, 'aquarium', '1992-08-04'), -> (9, 'study desk', '2006-09-16'), -> (10, 'lava lamp', '1998-12-25');Query OK, 10 rows affected (0.03 sec)Records: 10 Duplicates: 0 Warnings: 0创建后可以看到,每个分区都会对应1个ibd文件。上面创建语句还是很好理解的,在此分区表中,通过YEAR函数取出DATE日期中的年份并转化为整型,年份小于1990的存储在分区p0中,小于1995的存储在分区p1中,以此类推。请注意,每个分区的定义顺序是从最低到最高。为了防止插入的数据因找不到相应分区而报错,我们应该及时创建新的分区。下面继续展示关于分区维护的其他操作。
# 查看某个分区的数据mysql> SELECT * FROM tr PARTITION (p2);+------+-------------+------------+| id | name | purchased |+------+-------------+------------+| 2 | alarm clock | 1997-11-05 || 10 | lava lamp | 1998-12-25 |+------+-------------+------------+2 rows in set (0.00 sec)# 增加分区mysql> alter table tr add partition( -> PARTITION p6 VALUES LESS THAN (2020) -> );Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0# 拆分分区mysql> alter table tr reorganize partition p5 into( -> partition s0 values less than(2012), -> partition s1 values less than(2015) -> );Query OK, 0 rows affected (0.26 sec)Records: 0 Duplicates: 0 Warnings: 0# 合并分区mysql> alter table tr reorganize partition s0,s1 into ( -> partition p5 values less than (2015) -> );Query OK, 0 rows affected (0.12 sec)Records: 0 Duplicates: 0 Warnings: 0# 清空某分区的数据mysql> alter table tr truncate partition p0;Query OK, 0 rows affected (0.11 sec)# 删除分区mysql> alter table tr drop partition p1;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0# 交换分区# 先创建与分区表同样结构的交换表mysql> CREATE TABLE `tr_archive` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.28 sec)# 执行exchange交换分区mysql> alter table tr exchange PARTITION p2 with table tr_archive;Query OK, 0 rows affected (0.13 sec)3.分区注意事项及适用场景
其实分区表的使用有很多限制和需要注意的事项,参考官方文档,简要总结几点如下:
从上面的介绍中可以看出,分区表适用于一些日志记录表。这类表的特点是数据量大、并且有冷热数据区分,可以按照时间维度来进行数据归档。这类表是比较适合使用分区表的,因为分区表可以对单独的分区进行维护,对于数据归档更方便。
4.分区表为什么不常用
在我们项目开发中,分区表其实是很少用的,下面简单说明下几点原因:
总结:
本文较为详细的介绍了MySQL分区相关内容,如果想使用分区表的话,建议提早做好规划,在初始化的时候即创建分区表并制定维护计划,使用得当还是比较方便的,特别是有历史数据归档需求的表,使用分区表会使归档更方便。当然,关于分区表的内容还有很多,有兴趣的同学可以找找官方文档,官方文档中有大量示例。
以上就是详解MySQL分区表的详细内容,更多关于MySQL分区表的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
重装系统过程中发现硬盘丢失分区,那么可以重建分区表来解决该问题。要怎么重建分区表呢?下面使用u启动pe系统diskgenius工具来进行重建分区表。os更改启动
文章目录PosgtreSQL11支持为分区表创建一个默认(DEFAULT)的分区,用于存储无法匹配其他任何分区的数据。显然,只有RANGE分区表和LIST分区表
diskgenius修复分区表的方法是: 1、在识别到了硬盘的情况下,选中硬盘的盘符后选择“搜索已丢失分区(重建分区表)”; 2、重建了分区表后,选择重建主
gpt的意思是: gpt是全局唯一标识分区表。全局唯一标识分区表(GUIDPartitionTable,缩写:GPT)是指全局唯一标示磁盘分区表格式。它是可扩
传统的硬盘是MBR分区表,而新型的电脑硬盘都是GPT分区表。那么,如何查看自己的硬盘是GPT还是MBR分区表呢?1、右击【计算机】---属性2、单击【硬盘管理】