如何解决mysqldelete表数据后表空间大小不变的问题?
(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删除它,然后修复优化表。