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 相关文章推荐
MySQL8.0.24版本Release Note的一些改进点
Apr 22 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 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如何编写易读的代码
2007/07/10 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
php分页查询的简单实现代码
2017/03/14 PHP
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
Python实现KNN邻近算法
2021/01/28 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
11月红领巾广播稿
2014/01/17 职场文书
经销商培训邀请函
2014/01/21 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
监理中标通知书
2015/04/16 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
基于flask实现五子棋小游戏
2021/05/25 Python
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
python装饰器代码解析
2022/03/23 Python