164

简单的问题,但它一直在唠叨我一段时间......

MySQL中的“开销”是什么,我应该担心吗?

单击“优化表”是否可以修复它?

4

4 回答 4

154

似乎开销是数据库用来运行某些查询的临时磁盘空间,所以你应该只担心这真的很高。

您可以将“优化表”与硬盘碎片整理进行比较。

我引用:

随着时间的推移,每个数据库都需要某种形式的维护,以使其保持在最佳性能水平。清除已删除的行、重新排序、压缩、管理索引路径、碎片整理等在 mysql 中称为 OPTIMIZATION,在其他数据库中称为其他术语。例如,IBM DB2/400 将其称为 REORGANIZE PHYSICAL FILE MEMBER。

这有点像更换汽车中的机油或进行调整。你可能认为你真的不必这样做,但这样做你的车会跑得更好,你会得到更好的油耗,等等。一辆里程数多的汽车需要更频繁地进行调整。一个被大量使用的数据库也需要同样的东西。如果您正在执行大量 UPDATE 和/或 DELETE 操作,尤其是如果您的表具有可变长度列(VARCHAR、TEXT 等),您需要保持调整。

于 2009-02-19T16:12:06.647 回答
94

如果您正在谈论phpMyAdmin调用的东西overhead,那么它是表数据文件的实际大小相对于同一数据文件的理想大小(就像刚从备份中恢复时一样)。

出于性能原因,MySQL在删除或更新行后不压缩数据文件。

overhead对表扫描不利,即当您的查询需要遍历所有表值时,它需要查看更多的空白空间。

overhead您可以通过运行OPTIMIZE TABLE压缩表和索引来摆脱。

于 2009-02-19T16:28:12.417 回答
10

开销是表的Data_free ,即已分配但未使用的字节数。 我们可以通过 SQL 命令SHOW TABLE STATUS找到它。它是为您的表分配大小的可用空间。

于 2013-12-23T12:40:24.137 回答
2

优化表可能会很成问题。例如,如果该表在站点上被大量使用。

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

在删除大部分 MyISAM 或 ARCHIVE 表,或对具有可变长度行的 MyISAM 或 ARCHIVE 表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)进行许多更改之后。删除的行保存在一个链表中,随后的 INSERT 操作重用旧的行位置。<

我相信我已经确认了这种行为。它确实非常有用。

于 2015-02-24T12:22:02.410 回答