MySQL:在固定列的表上需要OPTIMIZE TABLE吗?

前端之家收集整理的这篇文章主要介绍了MySQL:在固定列的表上需要OPTIMIZE TABLE吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个每周脚本,它从我们的实时数据库移动数据并将其放入我们的存档数据库,然后删除它刚刚从实时数据库存档的数据.因为它是一个不错的大小删除(大约10%的表被修剪),我想我应该在此删除后运行OPTIMIZE TABLE.

但是,我正在从mysql文档中读到这个,我不知道如何解释它:
http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

“如果删除了表的大部分,或者对具有可变长度行的表(具有VARCHAR,VARBINARY,BLOB或TEXT列的表)进行了许多更改,则应使用OPTIMIZE TABLE.保留已删除的行在链表中,后续INSERT操作重用旧行位置.您可以使用OPTIMIZE TABLE回收未使用的空间并对数据文件进行碎片整理.

第一句对我来说是模棱两可的.这是否意味着你应该运行它:
A)您已删除了具有可变长度行的表的大部分,或者您对具有可变长度行的表进行了许多更改
要么
B)您删除了ANY表的大部分内容,或者您​​对具有可变长度行的表进行了很多更改

那有意义吗?所以如果我的表没有VAR列,我还需要运行吗?

虽然我们正在研究这个主题 – 是否有任何指示器告诉我OPTIMIZE呼叫表已经成熟?

另外,我读到了这个http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/,它说只运行OPTIMIZE表对主键很有用.如果我的大部分选择来自其他指数,我是否只是在拥有代理键​​的表上浪费精力?

非常感谢!

最佳答案
在您的场景中,我不认为定期优化表格会产生明显的差异.

首先,文档的第二个解释(B)是正确的 – “如果您删除了任何表的大部分内容,或者如果您对具有可变长度行的表进行了许多更改.”

如果您的表没有VAR列,则每条记录(无论其包含哪些数据)都会占用表中完全相同的空间量.如果从表中删除记录,并且DB选择重用上一条记录的确切区域,则可以不浪费任何空间或分割数据.

至于OPTIMIZE是否仅提高使用主键索引的查询性能,那么该答案几乎肯定会根据正在使用的存储引擎而有所不同,我担心我无法回答这个问题.

但是,谈到存储引擎,如果你最终使用OPTIMIZE,请注意它不喜欢在InnoDB表上运行,因此命令映射到ALTER并重建表,这可能是一个更昂贵的操作.无论哪种方式,表在优化期间都会锁定,因此在运行时要非常小心.

原文链接:https://www.f2er.com/mysql/432959.html

猜你在找的MySQL相关文章