简单的问题,但它一直在唠叨我一段时间......
MySQL中的“开销”是什么,我应该担心吗?
单击“优化表”是否可以修复它?
似乎开销是数据库用来运行某些查询的临时磁盘空间,所以你应该只担心这真的很高。
您可以将“优化表”与硬盘碎片整理进行比较。
我引用:
随着时间的推移,每个数据库都需要某种形式的维护,以使其保持在最佳性能水平。清除已删除的行、重新排序、压缩、管理索引路径、碎片整理等在 mysql 中称为 OPTIMIZATION,在其他数据库中称为其他术语。例如,IBM DB2/400 将其称为 REORGANIZE PHYSICAL FILE MEMBER。
这有点像更换汽车中的机油或进行调整。你可能认为你真的不必这样做,但这样做你的车会跑得更好,你会得到更好的油耗,等等。一辆里程数多的汽车需要更频繁地进行调整。一个被大量使用的数据库也需要同样的东西。如果您正在执行大量 UPDATE 和/或 DELETE 操作,尤其是如果您的表具有可变长度列(VARCHAR、TEXT 等),您需要保持调整。
如果您正在谈论phpMyAdmin
调用的东西overhead
,那么它是表数据文件的实际大小相对于同一数据文件的理想大小(就像刚从备份中恢复时一样)。
出于性能原因,MySQL
在删除或更新行后不压缩数据文件。
这overhead
对表扫描不利,即当您的查询需要遍历所有表值时,它需要查看更多的空白空间。
overhead
您可以通过运行OPTIMIZE TABLE
压缩表和索引来摆脱。
开销是表的Data_free ,即已分配但未使用的字节数。 我们可以通过 SQL 命令SHOW TABLE STATUS找到它。它是为您的表分配大小的可用空间。
优化表可能会很成问题。例如,如果该表在站点上被大量使用。
http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html
在删除大部分 MyISAM 或 ARCHIVE 表,或对具有可变长度行的 MyISAM 或 ARCHIVE 表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)进行许多更改之后。删除的行保存在一个链表中,随后的 INSERT 操作重用旧的行位置。<
我相信我已经确认了这种行为。它确实非常有用。