ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 数据碎片 当删除了数据表中的一条记录时,该记录占用对的空间会被留空,如果经常插入数据和删除数据,则会产生很多不连续的碎片,这样久而久之,这个表就会占用很大空间,但实际上表里面的记录数却很少,这样不但会浪费空间,而且查询速度也更慢。 在长期的数据更改过程中,索引文件和数据文件,都将产生空洞,形成碎片,我们通过删除了一部分数据,应该表的容量(数据文件大小)会减少一部分,**但是没有减掉 **. #### 语法: ~~~ optimize table 表名; //此方法只针对myisam引擎有效 ~~~ 结果: 如果用于innodb则表示表不支持优化,而是重新创建+分析。 ~~~ +-----------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------+----------+----------+-------------------------------------------------------------------+ | dome.user | optimize | note | Table does not support optimize, doing recreate + analyze instead | | dome.user | optimize | status | OK | +-----------+----------+----------+-------------------------------------------------------------------+ ~~~ #### 如果是innodb的表分为以下几个步骤 1. 开启独享表空间. ~~~ +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ ~~~ 2. 运行 ~~~ analyze table 表名; //实际测试无效, 文件未变小. ~~~ 结果: ~~~ +-----------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-----------+---------+----------+----------+ | dome.user | analyze | status | OK | +-----------+---------+----------+----------+ ~~~ 3. 运行 ~~~ alter table 表 engine=innodb; //实际测试有效,数据文件变小 ~~~ #### 注意 修复表的数据及索引碎片,就会把所有的数据文件重新整理一遍,使之对齐,这个过程,如果表的行数比较大,也是比较耗费资源的操作,所以,不能频繁的修复。 如果表的update,delete操作很频繁,可以按周月来修复。 #### 查看表的碎片空间大小 语法: ~~~ show table status like '表名'\G ~~~ 结果: ~~~ Name: 表名 Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 5917 Avg_row_length: 30 Data_length: 180224 Max_data_length: 0 Index_length: 0 Data_free: 92274688 // 表的留空空间,代表可优化 Auto_increment: 4652971 Create_time: 2018-03-21 01:34:00 Update_time: NULL Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment: ~~~