表的Mysql大小在删除后不会立即更新

表的Mysql大小在删除后不会立即更新,mysql,sql,Mysql,Sql,我有一个数据库,其中保存了几个应用程序的日志条目。 现在我已经编写了一个bash脚本,它应该删除超过大小限制的最早的一天。 我有一个循环,每天删除一天,直到帐户大小小于限制。 但是在delete语句之后,表的大小没有正确更新 我使用了这个Sql语句 'SELECT round(((data_length + index_length)), 0) "Size in Bytes" FROM information_schema.TABLES WHERE table_schema = "Log" AN

我有一个数据库,其中保存了几个应用程序的日志条目。 现在我已经编写了一个bash脚本,它应该删除超过大小限制的最早的一天。 我有一个循环,每天删除一天,直到帐户大小小于限制。 但是在delete语句之后,表的大小没有正确更新

我使用了这个Sql语句

'SELECT round(((data_length + index_length)), 0) "Size in Bytes" FROM information_schema.TABLES WHERE table_schema = "Log" AND table_name = "Log";'
确定会计表的实际大小。 如何在执行删除命令后立即强制MySql重新聚集此大小?

运行

 OPTIMIZE TABLE Log
删除后。这将更新索引统计信息(并释放所有未使用的磁盘空间)

这也可以用于刷新表统计信息


Ref:

您可以尝试更新统计信息,但它也会阻止您的表,直到完成。您应该了解如何保存和刷新表统计信息。我会开始寻找和阅读你不认为你所描述的整个方法是完全错误的吗?您选择检查磁盘上的数据库大小。这是MySQL需要担心的问题。如果您检查了一些大小,然后执行逻辑,它就不会被用作文件。如果您想使用MySQL进行日志存储(这不是最好的主意),那么在插入日志消息时将有关大小的信息存储到另一个表中。查询数据库是为了获取信息,而不是检查它们的元数据,在许多情况下,这些元数据被记录为近似值。
ANALYZE TABLE tableName;