在庞大的MariaDB生产数据库中创建索引,无需表锁定



我有一个包含202M条记录的表,我需要在其中添加一些索引,但我在任何地方都找不到它(或者可能我不懂行话(,如果可以在MariaDB 10.3中在不锁定的情况下做到这一点的话。

我发现这篇文章,我可以看到这在MySQL 5.6+中是可能的,但我的谷歌foo没有得到我在MariaDB上的任何信息。

我尝试使用pt在线模式更改,但由于我没有任何索引(甚至没有主索引(,这不是一个选项。

使用ALTER ONLINE TABLE可以实现这一点。

ALTER ONLINE TABLE等效于LOCK=NONE。因此,ALTERONLINE TABLE语句可用于确保您的ALTER TABLE操作允许所有并发DML。

进一步阅读告诉添加主键是一个;复制";作为DB引擎的操作需要将整个表复制到新文件中,但需要在就地操作中添加其他索引。

InnoDB支持在ALGORITHM设置为的表中添加主键就地。表将重新生成,这意味着所有数据进行了实质性的重组,并重建了索引。因此手术相当昂贵。此操作支持非锁定策略。此策略可以通过以下方式明确选择将LOCK子句设置为NONE。当使用此策略时允许并发DML。

InnoDB支持将ALGORITHM设置为就地。表未重新生成。此操作支持非锁定策略。此策略可以通过以下方式明确选择将LOCK子句设置为NONE。当使用此策略时允许并发DML。

MariaDB文档中的更多信息。

最新更新