首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该对MySql InnoDB表执行表优化吗?

我应该对MySql InnoDB表执行表优化吗?
EN

Stack Overflow用户
提问于 2021-05-25 23:02:25
回答 1查看 218关注 0票数 0

我有带有一些InnoDB表的MySQL (实际上是- MariaDB)数据库。这样的表中的记录永远不会删除,只会插入和更新。记录的数量已经相当多了--大约有几百万条。我相信,这些表自创建以来从未进行过优化。

我应该优化这样的表吗?如何验证我是否应该优化这样的表?

EN

回答 1

Stack Overflow用户

发布于 2021-05-25 23:28:28

不幸的是,几乎没有办法知道您是否需要优化InnoDB表。

当您删除或更新行时(我知道您说过不会删除),它可能会在行的旧版本处留下空白。优化表将所有行复制到新表中,没有间隙,因此它实现了“碎片整理”,并且可能会更紧凑地存储表。

您可以运行SHOW TABLE STATUS LIKE 'tablename'\G并获得显示差距大小的报告。它在该状态结果中被报告为列data_free。但事情是这样的:data_free只包含1MB或更大的间隙。较小的差距不会被计算在内,而这些差距可能会导致大量的碎片。从字面上讲,没有办法报告小差距的总数。

那么你是否应该优化这样的表呢?也许吧!这并不是一件坏事,比如说一个月一次。

但它不是在优化时锁定表和块查询吗?是啊,算是吧。这就是为什么我使用pt-online-schema-change来运行无操作更改(使用--alter=force选项)的原因,因此它可以在任何时候完成,而不会阻塞客户端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67690662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档