码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 索引重建

时间:2020-07-10 11:21:42      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:文件的   导致   写入   bsp   过程   临时   拷贝   文件   add   

MySQL 索引重建

 

 

当你对InnoDB进行修改操作时,例如删除一些行,这些行只是被标记为“已删除”,而不是真的从索引中物理删除了,因而空间也没有真的被释放回收。

 

InnoDB的Purge线程会异步的来清理这些没用的索引键和行,但是依然没有把这些释放出来的空间还给操作系统重新使用,因而会导致页面中存在很多空洞。

 

如果表结构中包含动态长度字段,那么这些空洞甚至可能不能被InnoDB重新用来存新的行,因为空间空间长度不足。

 

有些用户可能会使用 OPTIMIZE TABLE 或者 ALTER TABLE <table> ENGINE=InnoDB 来重建这些表,但是这样会导致表的拷贝,如果临时空间不足甚至不足以进行一次 OPTIMIZE TABLE 操作。

并且如果你用的是共享表空间方式,OPTIMIZE TABLE 会导致你的共享表空间文件持续增大,因为整理的索引和数据都追加在数据文件的末尾。

 

InnoDB类型的表是无法使用optimize table命令

 

## 重新索引k

一、

 

alter table T drop index k;

alter table T add index(k);

 

## 重建主键索引

一、

alter table T drop primary key;

alter table T add primary key(id);

 

二、

alter table T engine=InnoDB;

可以释放空洞,这是由于在转换数据引擎(即使没有真正转换)的时候,会将表中的所有数据读取,再重新写入,这个过程中,会释放空洞(效率慢)

 

MySQL 索引重建

标签:文件的   导致   写入   bsp   过程   临时   拷贝   文件   add   

原文地址:https://www.cnblogs.com/liuchd/p/13278022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!