引用博客: ??>> stephen one:mysql 删除数据后表占用空间还是很大.
以下是我遇到的问题:
1、现有一个数据库,通过查询语句
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='database3'
order by data_length desc, index_length desc;
??得到结果如下:
2、执行指定表的删除操作,SQL语句如下:
delete from plcalarmlogs
where 采集时间
between '2021/04/25 13:54:31' and '2022/05/25 13:54:31'
??结果:
3、出现的问题: ??执行了删除操作,数据也确实查不到了,但数据容量却很大
4、问题出现原因: ??在删除sql语句中,凡是使用像,delete…where… 结构的,都不是真删除,只是MySQL给记录加了个删除标识,自然这样操作后表数据占有空间也不会变小了。
5、解决办法: ??使用下面SQL语句来回收未使用的空间,并整理数据文件的碎片。
OPTIMIZE TABLE 表名
?? ??
6、附加(这部分我没有用到,仅做搬用记录) ??OPTIMIZE TABLE 只对MyISAM, BDB表起作用,。 innodb的数据库不支持optimize,可以用下面的SQL语句(前提是innodb_file_per_table = ON)
ALTER TABLE tableName ENGINE='InnoDB'
该方法会对旧表以复制的方式新建一个新表,然后删除旧表。虽然这个过程是安全的,但是在进行操作时还是先进行备份为好。 然后对表的索引信息做重新统计
analyze table tableName
|