Mysql 如何通过频繁更新重建大型全文索引

Mysql 如何通过频繁更新重建大型全文索引,mysql,triggers,indexing,locking,myisam,Mysql,Triggers,Indexing,Locking,Myisam,我们有一个MyISAM表,其中包含大约20GB的数据和全文索引。我们有几个触发器来操作这个表,它每秒被调用10次。现在我们要运行优化表来重建索引。AFAIK OPTIMIZE TABLE为写操作锁定表。那个么,若优化表大约需要6个小时,那个么触发器创建的查询会发生什么变化呢?这是个问题吗?查询会在一段时间后被删除吗?或者我们还可以做些什么来重建索引?当表被锁定时,不能对表进行写操作。任何试图写入的触发器都将挂起,直到它们获得锁定等待超时 您可以使用执行表重组,而不阻止对原始表的访问 否则,请在主

我们有一个MyISAM表,其中包含大约20GB的数据和全文索引。我们有几个触发器来操作这个表,它每秒被调用10次。现在我们要运行优化表来重建索引。AFAIK OPTIMIZE TABLE为写操作锁定表。那个么,若优化表大约需要6个小时,那个么触发器创建的查询会发生什么变化呢?这是个问题吗?查询会在一段时间后被删除吗?或者我们还可以做些什么来重建索引?

当表被锁定时,不能对表进行写操作。任何试图写入的触发器都将挂起,直到它们获得锁定等待超时

您可以使用执行表重组,而不阻止对原始表的访问


否则,请在主机复制中配置一对服务器,在第二台主机上执行优化表,然后交换它们的角色并在第一台主机上执行优化表。

有更多更好的选项。(1) 为MyISAM设置“并发插入=1”。(2) 使用InnoDB,它优化了全文搜索索引。这个总结基于我在这里读到的内容


因此,如果我理解正确,使用pt online schema change--alter“ENGINE=MyISAM”将重新创建索引?是的,表重组将重建表上的所有索引。当我尝试
pt online schema change--execute--alter“添加全文(post)”时
我得到错误:
无法对原始表db进行分块。table:没有好的索引,表过大。at/usr/bin/pt在线模式更改第5441行,第2行
。创建缺少的索引而不锁定是我试图做的。听起来这个表上没有主键或唯一键,这不是好的表设计。在这种情况下,避免使用表锁可能是运气不好的。很抱歉我避免创建主键,因为此表仅用于匹配查询,但如果工具需要,我可以创建一个主键,与创建全文索引相比,应该非常快。