返回顶部
首页 > 资讯 > 数据库 >如何使用MySQL分区表
  • 332
分享到

如何使用MySQL分区表

2024-04-02 19:04:59 332人浏览 独家记忆
摘要

这篇文章给大家介绍如何使用Mysql分区表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲

这篇文章给大家介绍如何使用Mysql分区表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。

mysql在创建表的时候可以通过使用PARTITioN BY子句定义每个分区存放的数据。在执行查询的时候,优化器根据分区定义过滤那些没有我们需要的数据的分区,这样查询就可以无需扫描所有分区,只需要查找包含需要数据的分区即可。

分区的另一个目的是将数据按照一个较粗的粒度分别存放在不同的表中。这样做可以将相关的数据存放在一起,另外,当我们想要一次批量删除整个分区的数据也会变得很方便。

下面简单介绍下四种常见的分区类型:

  • RANGE分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段。

  • LIST分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。

  • HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含Mysql中有效的、产生非负整数值的任何表达式。

  • KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

上述四种分区类型中,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.分区注意事项及适用场景

其实分区表的使用有很多限制和需要注意的事项,参考官方文档,简要总结几点如下:

  • 分区字段必须是整数类型或解析为整数的表达式。

  • 分区字段建议设置为NOT NULL,若某行数据分区字段为null,在RANGE分区中,该行数据会划分到最小的分区里。

  • MySQL分区中如果存在主键或唯一键,则分区列必须包含在其中。

  • Innodb分区表不支持外键。

  • 更改sql_mode模式可能影响分区表的表现。

  • 分区表不影响自增列。

从上面的介绍中可以看出,分区表适用于一些日志记录表。这类表的特点是数据量大、并且有冷热数据区分,可以按照时间维度来进行数据归档。这类表是比较适合使用分区表的,因为分区表可以对单独的分区进行维护,对于数据归档更方便。

4.分区表为什么不常用

在我们项目开发中,分区表其实是很少用的,下面简单说明下几点原因:

  • 分区字段的选择有限制。

  • 若查询不走分区键,则可能会扫描所有分区,效率不会提升。

  • 若数据分布不均,分区大小差别较大,可能性能提升也有限。

  • 普通表改造成分区表比较繁琐。

  • 需要持续对分区进行维护,比如到了6月份前就要新增6月份的分区。

  • 增加学习成本,存在未知风险。

如果想使用分区表的话,建议提早做好规划,在初始化的时候即创建分区表并制定维护计划,使用得当还是比较方便的,特别是有历史数据归档需求的表,使用分区表会使归档更方便。

关于如何使用MySQL分区表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 如何使用MySQL分区表

本文链接: https://lsjlt.com/news/60290.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用MySQL分区表
    这篇文章给大家介绍如何使用MySQL分区表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲...
    99+
    2024-04-02
  • 如何使用Oracle分区表
    这篇文章主要介绍“如何使用Oracle分区表”,在日常操作中,相信很多人在如何使用Oracle分区表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Oracle分区表”...
    99+
    2024-04-02
  • mysql如何创建分区表
    MySQL可以通过以下步骤来创建分区表:1. 创建一个普通的表,定义它的列和其他属性。2. 使用`ALTER TABLE`语句来添加...
    99+
    2023-10-12
    mysql
  • PostgreSQL 10中如何使用分区表
    本篇文章给大家分享的是有关PostgreSQL 10中如何使用分区表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。分区介绍PostgreSQL...
    99+
    2024-04-02
  • MySQL普通表如何转换成分区表
    小编给大家分享一下MySQL普通表如何转换成分区表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • MySQL中如何创建Key分区表
    本篇文章为大家展示了MySQL中如何创建Key分区表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 按照KEY进行分区类似于按照HAS...
    99+
    2024-04-02
  • mysql如何查询分区表信息
    这篇文章主要讲解了“mysql如何查询分区表信息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql如何查询分区表信息”吧! ...
    99+
    2024-04-02
  • mysql如何删除分区表数据
    要删除分区表的数据,可以使用以下语法: DELETE FROM table_name PARTITION (partitio...
    99+
    2024-04-15
    MySQL
  • mysql如何查询表分区信息
    要查询表的分区信息,可以使用以下两种方法: 使用SHOW CREATE TABLE命令查看表的创建语句,其中会包含分区信息。例如:...
    99+
    2024-04-23
    mysql
  • 如何在MySQL中实现分表和分区
    如何在MySQL中实现分表和分区?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。垂直分表垂直分表就是一个包含有很多列的表拆分成多...
    99+
    2024-04-02
  • mysql分区表:日期分区
    mysql分区表:日期分区 1.创建分区表2.查看分区3.添加分区4.存储过程:分区删除与创建5.事件定时6.触发器设计:子表每插入一行,总表获得一行7.创建索引8.添加枚举型字段 1.创建分区表 CREATE TAB...
    99+
    2023-08-21
    mysql 数据库
  • MySQL分区表的正确使用方法
    MySQL分区表概述 我们经常遇到一张表里面保存了上亿甚至过十亿的记录,这些表里面保存了大量的历史记录。 对于这些历史数据的清理是一个非常头疼事情,由于所有的数据都一个普通的表里。所以只能是启用一个或多个...
    99+
    2024-04-02
  • mysql 5.6分区表应用
    mysql 5.6分区表测试:DROP TABLE IF EXISTS `my_orders`;CREATE TABLE `my_orders` (  `id` int(10) unsig...
    99+
    2024-04-02
  • mysql中如何将一个表改为分区表
    这篇文章主要介绍mysql中如何将一个表改为分区表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql操作将一个表改为分区表:alter table 'table'...
    99+
    2024-04-02
  • MySql之分区分表
    MySql之分区分表分表的概念分表:将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可...
    99+
    2024-04-02
  • MySQL如何实现清空分区表单个分区数据
    这篇“MySQL如何实现清空分区表单个分区数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL如何实现清空分区表单个...
    99+
    2023-07-05
  • mysql如何给表创建一个分区
    在MySQL中,可以使用CREATE TABLE语句来创建一个分区表。以下是一个示例: CREATE TABLE employee ...
    99+
    2024-04-20
    mysql
  • mysql分区及分表(一)
                                 ...
    99+
    2024-04-02
  • mysql分区及分表(二)
                                mysql...
    99+
    2024-04-02
  • mysql如何分表
    这篇文章主要介绍mysql如何分表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!分表1,做mysql集群。例如:利用mysql cluster ,mysql proxy,mysql ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作