如何解决mysqldelete表数据后表空间大小不变的问题?

这是因为在删除操作之后,碎片会留在数据文件中。DELETE仅删除数据标识位,但不组织数据文件。当插入新数据时,这些设置为删除标识的记录空间将被再次使用。另外,在实际操作过程中还发现这个问题有两种情况。

(1)当DELETE后面跟有条件时,会出现此问题。比如:

Deletefromtable_namewhere条件

删除数据后,数据表占用的空间不会改变。

(2)当条件不满足时直接删除。比如:

deletefromtable_name

当数据被清除后,数据表的空间也会变成0。

这就有问题了,在网站的实际操作中。经常会有这种带条件删除数据的操作行为。随着时间的推移,它会浪费数据库中的大量空间。这时,我们应该使用OPTIMIZETABLE指令来优化表。

如何使用优化以及何时使用优化指令?

命令语法:optimize[local | no _ write _ to _ binlog]table TBL _ name[,TBL _ name]。...

最简单的:optimizetablephpernote _ article;

如果已经删除了表的很大一部分,或者对具有可变长度行的表(具有VARCHAR、BLOB或TEXT列的表)进行了许多更改,则应该使用。

可优化表格.删除的记录保存在链表中,后续的插入操作将重用旧的记录位置。您可以使用优化。

表来重用未使用的空间和整理数据文件。

在大多数设置中,您根本不需要运行OPTIMIZETABLE。即使你对变长旅行做了很多更新,也不需要频繁运行,一周一次或者一个月一次,只针对某个特定的表。

OPTIMIZETABLE只适用于MyISAM、BDB和InnoDB表。

请注意,当OPTIMIZETABLE运行时,MySQL会锁定该表。所以这个操作一定要在网站访问量少的时期进行。

缩短

它的语法结构是:

截断[表]tbl_name

这里有一个简单的例子,

我想删除friends表中的所有记录,可以使用下面的语句:

truncatetablefriends

delete的效果有点像把mysql表中的所有记录都一条一条删除,truncate相当于保留mysql表的结构,重新创建表,所有的状态都相当于新表,所以空间减少了。

好吧,当然不可能用truncatetable清空我们的网站,因为这样之后所有的数据都会丢失,所以清空肯定是不合理的。我们必须使用delete删除它,然后修复优化表。