如何清理表碎片 [ 新手入门 ]
当某张表删除完大量数据,或 MySQL 运行很长时间(一般指半年)后,难免会产生表碎片,这时就要对表进行碎片清理。
1) 查询表碎片大小(一般碎片率超过30%,可以考虑清理表碎片)
mysql> select t.table_name, t.table_schema, t.ENGINE, t.TABLE_ROWS, ROUND(t.DATA_LENGTH/1024/1024,2) DATA_LENGTH_MB, ROUND(t.INDEX_LENGTH/1024/1024,2) INDEX_LENGTH_MB,
ROUND((t.DATA_LENGTH+t.INDEX_LENGTH)/1024/1024,2) SUM_LENGTH_MB, ROUND(t.DATA_FREE/1024/1024,2) DATA_FREE_MB, CONCAT(ROUND((t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) * 100,2),'%') FRAGMENT_RATE
from information_schema.tables t
where 1=1
and t.DATA_FREE != 0
and (t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) >= 0.3 -- 碎片率超过30%
and t.TABLE_ROWS >= 0
and ROUND(t.DATA_FREE/1024/1024,2) >= 100
order by t.DATA_FREE / t.DATA_LENGTH desc
2) 清理表碎片
-- MyISAM存储引擎
mysql> OPTIMIZE TABLE tbl_name
-- Innodb存储引擎
mysql> ALTER TABLE tbl_name ENGINE = Innodb;
共 1 条回复
-
YiiChina首席执行官 回复于 2021-04-21 20:44 举报
PHP学院的中学生
注册时间:2018-10-23
最后登录:2024-09-23
在线时长:168小时13分
最后登录:2024-09-23
在线时长:168小时13分
- 粉丝29
- 金钱4725
- 威望30
- 积分6705