MySQL分区表管理命令汇总


Posted in MySQL onMarch 21, 2022

前言:

分区是一种表的设计模式,正确的分区可以极大地提升数据库的查询效率,完成更高质量的SQL编程。但是如果错误地使用分区,那么分区可能带来毁灭性的的结果。

分区功能并不是在存储引擎层完成的,因此不只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM、NDB等都支持分区。但是并不是所有的存储引擎都支持,如CSV、FEDORATED、MERGE等就不支持分区。在使用此分区功能前,应该对选择的存储引擎对分区的支持有所了解。

MySQL数据库在5.1版本时添加了对分区的支持,分区的过程是将一个表或索引分解为多个更小、更可管理的部分。就访问数据库的应用而言,从逻辑上讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个物理分区组成。每个分区都是独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。

MySQL数据库支持的分区类型为水平分区(指将同一个表中不同行的记录分配到不同的物理文件中),并不支持垂直分区(指将同一表中不同列的记录分配到不同的物理文件中)。此外,MySQL数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引。而全局分区是指,数据存放在各个分区中,但是所有数据的索引放在一个对象中。目前,MySQL数据库还不支持全局分区,接下来我们一起来看看分区表的管理吧!

一、ANALYZE和CHECK PARTITION 分析和检查分区

ANALYZE分析分区:

ALTER TABLE t_test_task_result ANALYZE PARTITION p20220218,p20220219;
+------------------------------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+---------+----------+----------+
| testdb.t_test_task_result | analyze | status | OK |
+------------------------------------------+---------+----------+----------+
1 row in set (0.01 sec)

CHECK 检查分区是否存在错误:

 ALTER TABLE t_test_task_result check PARTITION p20220218,p20220219;
+------------------------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+-------+----------+----------+
| testdb.t_test_task_result | check | status | OK |
+------------------------------------------+-------+----------+----------+
1 row in set (0.03 sec)

二、REPAIR 修复分区

ALTER TABLE t_test_task_result repair PARTITION p20220218,p20220219;
+------------------------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+--------+----------+----------+
| testdb.t_test_task_result | repair | status | OK |
+------------------------------------------+--------+----------+----------+

三、OPTIMIZE 分区

该命令主要是用于回收空闲空间和分区的碎片整理。对分区执行该命令,相当于依次对分区执行 CHECK PARTITION, ANALYZE PARTITION,REPAIR PARTITION命令。

会锁表:

ALTER TABLE t_test_task_result OPTIMIZE PARTITION p20220218,p20220219;
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| testdb.t_test_task_result | optimize | note | Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. |
| testdb.t_test_task_result | optimize | status | OK |
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
2 rows in set (1 min 35.75 sec)

四、REBUILD分区

重建分区,它相当于先删除分区中的数据,然后重新插入。这个主要是用于分区的碎片整理。这个操作会操作锁表

ALTER TABLE t_test_task_result REBUILD PARTITION p20220218,p20220219;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0

ALTER TABLE t_test_task_result REBUILD PARTITION p20220225,p20220226,p20220227,p20220228;
Query OK, 0 rows affected (2 min 9.38 sec)
Records: 0 Duplicates: 0 Warnings: 0

五、新增和删除分区

添加分区测试: ADD PARTITION(新增分区)

ALTER TABLE t_test_task_result ADD PARTITION (PARTITION p20220401 VALUES LESS THAN (TO_DAYS('2022-04-01')));

ALTER TABLE t_test_task_result ADD PARTITION (PARTITION p20220401 VALUES LESS THAN (TO_DAYS('2022-04-01')));
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0

删除分区测试:DROP PARTITION(删除分区)

ALTER TABLE t_test_task_result DROP PARTITION p20220218;
##提示删除分区是物理删除,操作非常快
 ALTER TABLE t_test_task_result DROP PARTITION p20220218;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@testdb 15:02: [testdb]> ALTER TABLE t_test_task_result DROP PARTITION p20220219,p20220220;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

到此这篇关于MySQL分区表管理命令汇总 的文章就介绍到这了,更多相关MySQL分区表管理命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
MySQL的join buffer原理
Apr 29 MySQL
MySQL中distinct与group by之间的性能进行比较
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
Linux系统下MySQL配置主从分离的步骤
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 #MySQL
mysql 获取时间方式
Mar 20 #MySQL
mysql 生成连续日期及变量赋值
Mar 20 #MySQL
MySQL派生表联表查询实战过程
MySQL学习之基础命令实操总结
Mar 19 #MySQL
MySQL学习之基础操作总结
Mar 19 #MySQL
You might like
PHP中extract()函数的妙用分析
2012/07/11 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
深入解析php中的foreach函数
2013/08/31 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python深入学习之装饰器
2014/08/31 Python
Python2随机数列生成器简单实例
2017/09/04 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
主管会计岗位责任制
2014/02/10 职场文书
高中生操行评语大全
2014/04/25 职场文书
销售类求职信
2014/06/13 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
庆七一主持词
2015/06/29 职场文书
2015年店长个人工作总结
2015/10/23 职场文书