gpt4 book ai didi

mysql - 对 InnoDB 表进行分析和优化

转载 作者:行者123 更新时间:2023-11-29 02:39:54 25 4
gpt4 key购买 nike

那时,当我大量使用 MyISAM 表时,我总是有一个运行的 cronjob

~# mysqlanalyze -o database

我知道 MyISAM 在某些方面从中受益,例如:碎片化等等

现在,当在大多数表是 InnoDB 的数据库上运行相同的命令时,我想知道这是否对表“有任何好处”并且被认为是不时这样做的好习惯,或者它是否相当反富有成效的。大量阅读:

Table does not support optimize, doing recreate + analyze instead

关于磁盘 IO/CPU 时间,哪个听起来很昂贵?!

希望对此有一些意见。

最佳答案

https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html说:

For InnoDB tables, OPTIMIZE TABLE is mapped to ALTER TABLE ... FORCE, which rebuilds the table to update index statistics and free unused space in the clustered index.

这在你有太多碎片的情况下确实有一些好处。如果您使用 innodb_file_per_table(这是最近版本的默认设置),页面将被更有效地填充,索引将被重建,并且表占用的磁盘空间将减少。

这确实需要时间,具体取决于您的 table 大小。它会在运行时锁定表。它在运行时需要额外的磁盘空间,因为它会创建表的副本。

在 InnoDB 表上执行优化表通常不需要经常执行,但只有在您以可能导致碎片的方式对表执行大量插入/更新/删除之后才执行。

ANALYZE TABLE 对 InnoDB 的影响要小得多。这不需要构建表的副本。这是一个只读操作,它只是从表中随机读取页面样本,并使用它来估计行数、行的平均大小,并更新有关索引的统计信息,以指导查询优化器。这在任何时候运行都是安全的,它会暂时锁定该表,但无论表的大小如何都不会更大。

关于mysql - 对 InnoDB 表进行分析和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54850311/

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