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 相关文章推荐
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
May 29 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
mysql sql常用语句大全
Jun 21 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
Mysql数据库group by原理详解
Jul 07 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 URL验证正则表达式
2011/07/19 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
Vue修改项目启动端口号方法
2019/11/07 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Django的视图中使用数据库查询的方法
2015/07/16 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
python3 线性回归验证方法
2019/07/09 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
什么是设计模式
2012/06/17 面试题
Prototype如何更新局部页面
2013/03/03 面试题
经理管理专业自荐信范文
2013/12/31 职场文书
小班秋游活动方案
2014/02/22 职场文书
婚庆司仪主持词
2014/03/15 职场文书
青年文明号服务承诺
2014/03/31 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
上甘岭观后感
2015/06/10 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
运动员加油词
2015/07/18 职场文书
创业计划书之寿司
2019/07/19 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL
vue中data里面的数据相互使用方式
2022/06/05 Vue.js