在MySQL中,“开销”是什么意思,它的缺点是什么,以及如何解决它?


157

一个简单的问题,但它已经困扰了我一段时间。

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

单击“优化表”是否能真正解决问题?

Answers:


147

开销似乎是数据库用来运行某些查询的临时磁盘空间,因此,您只需要担心它真的变高。

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

我引用:

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

这就像在更换汽车机油或进行调校。您可能认为您确实没有必要,但是这样做可以使您的汽车运行得更好,获得更高的汽油行驶里程等。获得很多行驶里程的汽车需要更频繁地进行调校。大量使用的数据库需要相同的数据库。如果您要执行许多UPDATE和/或DELETE操作,尤其是如果您的表具有可变长度的列(VARCHAR,TEXT等),则需要进行调整。


1
@Jasper在优化过程中,表是否完全锁定(无法读取/写入)?
Pacerier

4
该报价来自何处?我在Google中发现了很多结果。
伊恩·亨特

我们怎么知道是哪一次又一次导致开销?
mahen3d

感谢您提供完美而简单的示例,无论使用什么技术术语。
shyammakwana.me,2016年

1
什么被称为“真的很高”?
TV-C-15

87

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

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

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

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


7
mysql文档的大小显示“如果删除了表的很大一部分,或者对具有可变长度行的表进行了许多更改,则应使用OPTIMIZE TABLE”,这是我的情况,谢谢:)
boclodoa

8

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


1

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.