当前位置: 首页 > news >正文

mysql中OPTIMIZE TABLE的作用

1、先来看看多次删除插入操作后的表索引情况

mysql> SHOW INDEX FROM `tbl_name`;
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl_name | 0 | PRIMARY | 1 | StepID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | FlowID | 1 | FlowID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerCount | 1 | WagerCount | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 1 | WagerID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 2 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 3 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 1 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 2 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 1 | WagerID | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 2 | StepType | A | 1 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 3 | ParamResult | A | 1 | 255 | NULL | | BTREE | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
11 rows in set (0.01 sec)

2、优化表

mysql> optimize table tbl_name;
+---------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+----------+----------+----------+
| test.tbl_name | optimize | status | OK |
+---------------+----------+----------+----------+
1 row in set (40.60 sec)

3、再来看看优化后的效果

mysql> SHOW INDEX FROM `tbl_name`;
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl_name | 0 | PRIMARY | 1 | StepID | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | FlowID | 1 | FlowID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerCount | 1 | WagerCount | A | 4311 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 1 | WagerID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 2 | StepType | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_3 | 3 | ParamResult | A | 172462 | 255 | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 1 | StepType | A | 9 | NULL | NULL | | BTREE | |
| tbl_name | 1 | StepType_2 | 2 | ParamResult | A | 86231 | 255 | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 1 | WagerID | A | 86231 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 2 | StepType | A | 172462 | NULL | NULL | | BTREE | |
| tbl_name | 1 | WagerID_2 | 3 | ParamResult | A | 172462 | 255 | NULL | | BTREE | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

最后,来看看手册中关于 OPTIMIZE 的描述:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用
OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新
利用未使用的空间,并整理数据文件的碎片。

在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次
即可,只对特定的表运行。

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

相关文章:

  • Speed up your eclipse as a super fast IDE
  • grep 正则表达式 vim及相关知识
  • 自动部署ubuntu系统时ks.cfg和ks.seed有什么不同
  • Android学习系列(19)--App离线下载
  • oracle12c管理作业资源的一种方式
  • uva 11121(-2进制)
  • IDEA编码编译不通过
  • ❲很有料❳系统负载能力浅析
  • mysql更新一个表中的某个字段值等于另一个表的某个字段值
  • a++与 ++a
  • ios 自定义cell cellForRowAtIndexPath中的写法
  • Angular学习(8)- 路由
  • PHP核心技术与最佳实践 读书笔记 第三章 正则表达式基础与应用
  • Ubantu 16.04升级内核版本和还原到升级之前的内核版本的方法
  • Android五种数据传递方法汇总
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • C++类的相互关联
  • ES6系统学习----从Apollo Client看解构赋值
  • Netty 4.1 源代码学习:线程模型
  • Windows Containers 大冒险: 容器网络
  • 安卓应用性能调试和优化经验分享
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 高性能JavaScript阅读简记(三)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 理清楚Vue的结构
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 组复制官方翻译九、Group Replication Technical Details
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • $$$$GB2312-80区位编码表$$$$
  • (007)XHTML文档之标题——h1~h6
  • (Java)【深基9.例1】选举学生会
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)c52学习之旅-流水LED灯
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ./configure,make,make install的作用
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net MVC4 上传大文件,并保存表单
  • .NET NPOI导出Excel详解
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .net中应用SQL缓存(实例使用)
  • /etc/fstab 只读无法修改的解决办法
  • ::before和::after 常见的用法
  • @AutoConfigurationPackage的使用
  • @Autowired和@Resource的区别
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ 手记 ] 关于tomcat开机启动设置问题