#### 數據碎片
當刪除了數據表中的一條記錄時,該記錄占用對的空間會被留空,如果經常插入數據和刪除數據,則會產生很多不連續的碎片,這樣久而久之,這個表就會占用很大空間,但實際上表里面的記錄數卻很少,這樣不但會浪費空間,而且查詢速度也更慢。
在長期的數據更改過程中,索引文件和數據文件,都將產生空洞,形成碎片,我們通過刪除了一部分數據,應該表的容量(數據文件大小)會減少一部分,**但是沒有減掉 **.
#### 語法:
~~~
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鎖機制
- 鎖機制介紹
- 鎖的幾種形式
- 表鎖操作
- 行鎖操作
- 數據碎片與維護
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主從復制
- 介紹
- 讀寫分離