重新构建MySQL索引

时间:2011-09-24 23:06:02

标签: mysql architecture indexing schema

由于先前糟糕的索引设计,我必须重新构建索引结构。 我有大约200个表,每个表有几千到2000万行。 手动删除索引并在生命系统上创建新索引需要数天时间。

所以这是我的想法:

  1. 我删除了架构(备份后;)

  2. 创建新架构

  3. 使用CREATE TABLE语句运行完整系列,声明所需的主键和索引(需要一分钟左右)

  4. 将数据库的RESTORE运行到新架构中(这可能需要2个小时 - 但不是几天)

  5. 这有意义吗?

1 个答案:

答案 0 :(得分:1)

我认为您提出的解决方案类似,但您可以启动新的复制从属设备,然后首先对该计算机上的架构进行更改。只要您只对索引进行更改,就会继续重新应用事件而不会出现错误。

一旦更改完成,您就可以1)将slave升级为master,在slave上应用相同的更改然后切换回来或2)停止两个MySQL实例并将原始数据文件从slave传输到master。

使用此方法,索引仍然可以重建,但确实需要多长时间才能对从属设备进行更改。唯一的停机时间是复制文件所需的时间长度。

还有其他解决方案可以在不使用诸如oak-online-alter-table http://openarkkit.googlecode.com/svn/trunk/openarkkit/doc/html/oak-online-alter-table.html之类的奴隶和Facebook http://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932开发的类似工具的情况下对表执行非阻塞更改。

相关问题