龙空技术网

MySQL 索引碎片与维护

寒笛过霜天 40

前言:

此刻各位老铁们对“mysql索引重建和索引碎片问题”大体比较关切,咱们都想要知道一些“mysql索引重建和索引碎片问题”的相关资讯。那么小编同时在网上收集了一些有关“mysql索引重建和索引碎片问题””的相关知识,希望咱们能喜欢,同学们快快来学习一下吧!

在长期的数据更改过程中, 索引文件和数据文件, 都将产生空洞, 形成碎片。(不停的删除修改导致)

解决办法:

(1)我们可以通过一个nop操作(不产生对数据实质影响的操作), 来修改表.

比如: 表的引擎为innodb , 可以 alter table xxx engine innodb(修改表的引擎类型为其默认类型会重新调整数据, 但不会影响数据)

mysql> SHOW create table tG

*************************** 1. row ***********************

Table: t

Create Table: CREATE TABLE `t` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(40) DEFAULT NULL,

`idCard` char(18) DEFAULT NULL,

`sex` char(1) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `idCard` (`idCard`),

KEY `sex` (`sex`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

1 row in set (0.02 sec)

mysql> alter table t engine myisam;

Query OK, 0 rows affected (0.25 sec)

Records: 0 Duplicates: 0 Warnings: 0

(2)optimize table 表名, 也可以修复。

mysql> optimize table exam;

+------------+----------+----------+--------------------------------------------

-----------------------+

| Table | Op | Msg_type | Msg_text

|

+------------+----------+----------+--------------------------------------------

-----------------------+

| exam9.exam | optimize | note | Table does not support optimize, doing recr

eate + analyze instead |

| exam9.exam | optimize | status | OK

|

+------------+----------+----------+--------------------------------------------

-----------------------+

2 rows in set (1.14 sec)

注意: 修复表的数据及索引碎片, 就会把所有的数据文件重新整理一遍, 使之对齐.

这个过程,如果表的行数比较大, 也是非常耗费资源的操作.

所以, 不能频繁的修复。

如果表的Update操作很频率, 可以按周/月, 来修复.

如果不频繁, 可以更长的周期来做修复.

标签: #mysql索引重建和索引碎片问题 #mysql索引重建和索引碎片问题的区别 #mysql磁盘碎片