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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
mysql优化
Apr 06 MySQL
Mysql MVCC机制原理详解
Apr 20 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
MySQL三种方式实现递归查询
Apr 18 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
关于MySQL中explain工具的使用
May 08 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类
2008/04/09 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
php时间戳转换代码详解
2019/08/04 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
如何在Python中编写并发程序
2016/02/27 Python
Python在线运行代码助手
2016/07/15 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python实现图片筛选程序
2018/10/24 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
学生安全责任书模板
2014/07/25 职场文书
建筑管理专业求职信
2014/07/28 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
导游词之太原天龙山
2020/01/02 职场文书