MySQL 索引重建

Posted 搬砖工人1207

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 索引重建相关的知识,希望对你有一定的参考价值。

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 索引重建的主要内容,如果未能解决你的问题,请参考以下文章

(solr系列:五) solr定时实时重建索引和增量更新

Mysql忽略文件名的安全编码

mysql时间字段加索引后如何生效

oracle索引问题,删除再重建索引与索引分析

MySQL中索引基础知识及使用规则

MySQL 8.0 隐藏索引