这个网站上有很多关于optimize table和analyze table.的问题/答案。
问题:如果我们想快速执行DDL/DML/SELECT,即使表上有碎片,也不需要思考空间,那么只能执行analyze table命令吗?因为我们有500 to大小的表,存储引擎是innodb,所以optimize table命令需要时间。
Optimize table对表数据和相关索引数据的物理存储进行了重组,减少了存储空间,提高了访问表的I/O效率。Analyze table执行密钥分发分析,并存储命名表的分布。我认为,表统计是最新的,如果我们不关心空块使用的空间,就不需要优化表。
发布于 2020-02-14 20:06:04
对,是这样。优化表将数据复制到新的表空间,并重新构建索引。一张大桌子要花很长时间。
整理InnoDB表并不能提高性能,因为在内部,页面通常是按顺序存储的。也就是说,要使InnoDB返回“下一行”,它可能必须跟随一个指针从当前页到另一个页面,该指针可能在物理上远离当前页面。由于这是InnoDB在非分段表空间中的正常行为,所以如果中间的页面被占用或空白,可能不会有任何不同。
如果表空间能够更有效地打包页面,那么对表空间进行碎片整理可能会有所帮助,因此缓存在缓冲池中的页代表了表的行和索引的更大子集。
分析表不需要很长时间,对于一个大表也不需要更长的时间。它读取一定数量的页面作为表的示例,并基于此估计索引基数和平均行大小以及其他一些统计数据。默认情况下,这个示例是8页还是20页,这取决于是否启用了持久状态。
分析表帮助性能的方法是更新优化器用于为给定查询选择索引的统计信息。如果更新的统计数据对索引的选择没有任何实质性影响,它将不会对性能产生任何影响。只有当新的统计数据会导致优化器选择更有利的指数时,才有关系。
https://stackoverflow.com/questions/60225555
复制相似问题