#### 数据碎片
当删除了数据表中的一条记录时,该记录占用对的空间会被留空,如果经常插入数据和删除数据,则会产生很多不连续的碎片,这样久而久之,这个表就会占用很大空间,但实际上表里面的记录数却很少,这样不但会浪费空间,而且查询速度也更慢。
在长期的数据更改过程中,索引文件和数据文件,都将产生空洞,形成碎片,我们通过删除了一部分数据,应该表的容量(数据文件大小)会减少一部分,**但是没有减掉 **.
#### 语法:
~~~
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:
~~~
- MySQL优化概述
- 存储引擎的选择
- innodb引擎
- myisam引擎
- memory引擎
- 查询需优化语句
- 通用查询日志
- 慢查询日志
- profile机制
- 索引
- 索引基本介绍
- 索引类型
- 索引管理语法
- 创建索引主要事项
- 执行计划
- 查看索引类型
- myisam索引数据结构
- innodb索引数据结构
- 索引覆盖
- 索引使用原则
- 列独立
- like查询
- 复合索引使用
- or运算都具有索引
- mysql智能选择
- 优化group by语句
- 前缀索引
- 全文索引
- 查询缓存
- 查询缓存操作
- 无缓存
- limit分页优化
- 分区
- 分区介绍
- list分区
- range分区
- hash分区
- key(键值)分区
- 分区管理
- 分表
- 分表介绍
- 水平分表
- 垂直分表
- MySQL锁机制
- 锁机制介绍
- 锁的几种形式
- 表锁操作
- 行锁操作
- 数据碎片与维护
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主从复制
- 介绍
- 读写分离