gpt4 book ai didi

MySQL:在具有固定列的表上需要优化表吗?

转载 作者:可可西里 更新时间:2023-11-01 07:06:43 25 4
gpt4 key购买 nike

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

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

"OPTIMIZE TABLE 应该被使用,如果你已经删除了一个表的很大一部分,或者如果你对一个具有可变长度行的表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)做了很多更改。已删除行在链表中维护,后续 INSERT 操作重用旧行位置。您可以使用 OPTIMIZE TABLE 回收未使用的空间并对数据文件进行碎片整理。”

第一句话对我来说是模棱两可的。这是否意味着您应该在以下情况下运行它:A)你已经删除了一个表的大部分行变长,或者如果你对一个行变长的表做了很多更改或者B) 您删除了任何表的大部分,或者如果您对具有可变长度行的表进行了许多更改

这有意义吗?因此,如果我的表没有 VAR 列,我还需要运行它吗?

当我们讨论这个主题时 - 是否有任何指示器告诉我一个表已经适合 OPTIMIZE 调用?

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

非常感谢!

最佳答案

在您的情况下,我认为定期优化表格不会产生明显的不同。

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

如果您的表没有 VAR 列,则每条记录,无论其包含的数据如何,都会在表中占用完全相同的空间量。如果从表中删除一条记录,并且数据库选择重新使用上一条记录存储的确切区域,它可以这样做而不会浪费任何空间或碎片化您的数据。

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

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

关于MySQL:在具有固定列的表上需要优化表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com