首页 > 数据库 >mysql 分区总结

mysql 分区总结

时间:2024-12-24 11:10:33浏览次数:8  
标签:总结 LESS 分区 PARTITION 分区表 VALUES mysql

初稿摘录,后续会按自己经验更新:https://blog.csdn.net/weixin_42507868/article/details/113294679 四种常见的分区类型:   RANGE分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段。 LIST分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。 HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。 KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。   上述四种分区类型中,RANGE分区 即范围分区是最常用的。RANGE分区的特点是多个分区的范围要连续,但是不能重叠,默认情况下使用VALUES LESS THAN属性,即每个分区不包括指定的那个值。


创建分区表 mysql> CREATE TABLE `t1` ( `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)  ); # 插入数据 mysql> INSERT INTO `t1` 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');

# 查看某个分区的数据

mysql> SELECT * FROM t1 PARTITION (p2);

# 增加分区

mysql> alter table tr add partition(PARTITION p6 VALUES LESS THAN (2020) );

# 拆分分区

mysql> alter table tr reorganize partition p5 into(

partition s0 values less than(2012),

partition s1 values less than(2015)

);

# 合并分区

mysql> alter table tr reorganize partition s0,s1 into (

partition p5 values less than (2015)

);

# 清空某分区的数据

mysql> alter table tr truncate partition p0;

# 删除分区

mysql> alter table tr drop partition p1;

# 交换分区

# 先创建与分区表同样结构的交换表t2(表结构相同,但没有分区)

# 执行exchange交换分区

mysql> alter table t1 exchange PARTITION p2 with table t2;

分区注意事项及适用场景

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

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

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

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

Innodb分区表不支持外键。

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

分区表不影响自增列。

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

4.分区表为什么不常用

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

分区字段的选择有限制。

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

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

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

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

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

总结:

本文较为详细的介绍了MySQL分区相关内容,如果想使用分区表的话,建议提早做好规划,在初始化的时候即创建分区表并制定维护计划,使用得当还是比较方便的,特别是有历史数据归档需求的表,使用分区表会使归档更方便。当然,关于分区表的内容还有很多,有兴趣的同学可以找找官方文档,官方文档中有大量示例。

标签:总结,LESS,分区,PARTITION,分区表,VALUES,mysql
From: https://www.cnblogs.com/myxinyang/p/18626916

相关文章

  • Java 项目实战:全方位解析基于 Spring Boot、MySQL、FastJSON、MyBatis - Plus、Swagge
    1.引言1.1编写目的本设计文档详细阐述了SNS系统的架构、功能模块、数据结构、接口设计以及系统部署等方面,为系统的开发、测试、维护提供全面的指导,确保项目团队成员对系统有清晰一致的理解,保证系统的顺利实施与迭代优化。1.2适用范围本设计文档适用于SNS系统的开发团队、测试......
  • MySQL主从复制中启用GTID(全局事务标识符)模式
    在MySQL中启用GTID(全局事务标识符)模式进行主从复制涉及几个步骤。GTID为每个事务赋予一个唯一的标识符,从而简化了复制过程和故障恢复。以下是启用GTID模式的基本步骤:首先确保两台数据库目前数据保持一致1.准备工作确保您使用的MySQL版本支持GTID。GTID从MySQL5.6版本开始支持......
  • Can't connect to local MySQL server through socket
    mysql-urootERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/tmp/mysql.sock'(2)这是mysql登录时找不到套接字的问题。首先需要明白的是,Linux端的mysqlserver启动时会开启一个socket,Linux上的MySQL的客户端在不使用IP连接时mysqlserver时,默认......
  • 处理MYSQL 插入数据时主键相同的场景:新增?替换?忽略?
    在MySQL中,如果你尝试插入一条记录,其主键(或唯一约束字段)与已有记录的主键相同,会根据不同的操作方式产生不同的结果。以下是常见情况及其处理方式:1.使用INSERT语句如果你使用标准的INSERT语句并尝试插入一条记录,但其主键与已存在的记录冲突,会出现错误,通常是类似以下的错误......
  • mysql语句
    常用语句--检查并删除已存在的数据库DROPDATABASEIFEXISTS`date_time_test`;--创建数据库CREATEDATABASE`date_time_test`;--使用新创建的数据库USE`date_time_test`;--检查并删除已存在的表DROPTABLEIFEXISTSsales_orders;--创建表CREATETABLEsales_order......
  • php+html+mysql实现购物商城在线购物系统零食购物系统计算机源码获取php+mysql电子商
     一.功能介绍用户前台功能:前台主要包括网站首页、今日特卖、限时打折、商品中心、常见问题、我的购物车、登录、注册、商品详情,联系卖家,加入购物车、结算、个人中心等功能模块。今日特卖、限时打折、商品中心模块,用户可以查看全部商品信息,选择商品进行添加购物车等操作;购......
  • MySQL 触发器通过示例进行解释:自动化数据库操作
    什么是MySQL触发器?触发器是与表相关的数据库对象,当对表执行特定的操作(如INSERT、UPDATE、DELETE)时,触发器会自动执行。它就像是一个在后台默默工作的“小机器人”,一旦监听到指定的事件发生,就会按照预先定义的规则进行操作。创建一个简单的INSERT触发器示例假设我们有两......
  • 《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、Dock
    @目录二、高级篇(大厂进阶)2.DockerFile解析2.1是什么2.2DockerFile构建过程解析2.3DockerFile常用保留字指令2.4案例2.4.1自定义镜像mycentosjava82.4.2虚悬镜像2.5小总结本人其他相关文章链接二、高级篇(大厂进阶)2.DockerFile解析2.1是什么问题:DockerFile是什么?......
  • MySQL字符集和优化
    MySQL字符集和优化MySQL字符集字符集介绍字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Characterset)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、G......
  • MySQL主从架构
    MySQL主从架构MySQL主从架构(Master-SlaveArchitecture)是一种常见的数据库高可用性和负载均衡的设计模式,通常用于提高系统的可伸缩性和可靠性。它基于数据复制(replication)机制,其中“主”服务器负责处理所有的写操作,而“从”服务器则通过复制主服务器的数据来保持数据一致性,主要用......