重新创建巨大的myisam表后索引基数问题

时间:2013-09-24 05:59:16

标签: mysql database indexing myisam cardinality

最近我的任务是在myisam表上删除并重新插入大约1500万行,这个行有大约1.5亿行,而表/ db仍然可用 用于插入/读取。

为了做到这一点,我已经开始了一个需要小块数据的过程 并通过插入select语句将其重新插入具有相同结构的克隆表中,在运行之间休眠以避免服务器过载,跳过要删除的数据并插入替换数据。

这种方式,当克隆表在构建过程中(花了8个多小时),新数据进入源表。最后,我不得不将表与新数据同步 在8个多小时内添加并重命名表。

除了一件事以外,一切都很好。基数 克隆表上的索引是关闭的,并且针对它执行的查询的执行计划很糟糕(对于其中一些来说,从几秒到30多分钟)。

我知道可以通过在其上运行Analyze表来解决这个问题,但是这也花了很多时间(目前我在奴隶服务器上运行一个并且现在执行了10多个小时)我可以在执行分析时,不能让此表离线写入。此外,这将强调服务器的IO对服务器施加压力并降低其速度。

有人可以解释为什么通过insert select语句构建myisam表会导致表中的索引内部统计信息很差吗?

还有一种方法可以逐步构建表并在最后使索引处于良好状态吗?

提前致谢。

0 个答案:

没有答案