需求:查询碎片大于100m的表,并自动整理

查询碎片

SELECT `TABLE_SCHEMA` as 'database_name',`TABLE_NAME` as 'table_name',(`DATA_LENGTH`+`INDEX_LENGTH`)-(`TABLE_ROWS`*`AVG_ROW_LENGTH`) as splinter 
FROM information_schema.`TABLES` 
WHERE `TABLE_TYPE`='BASE TABLE' 
HAVING splinter >104857600;

说明:

数据总大小:DATA_LENGTH+INDEX_LENGTH 实际表空间大小: TABLE_ROWS*AVG_ROW_LENGTH 碎片大小 = 数据总大小-实际表空间大小

碎片整理 根据上面查询的结果,执行:

optimize table database_name.table_name