1

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

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

我尝试使用 pt-online-schema-change 但由于我没有任何不是选项的索引(甚至不是主索引)。

4

1 回答 1

0

这可以通过使用ALTER ONLINE TABLE来实现。

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

进一步阅读表明添加主键是一种“复制”操作,因为数据库引擎需要将整个表复制到新文件中,但在就地操作中添加其他索引。

InnoDB 支持将主键添加到 ALGORITHM 设置为 INPLACE 的表中。表被重建,这意味着所有的数据都被大幅重组,索引也被重建。结果,该操作非常昂贵。该操作支持非锁定策略。可以通过将 LOCK 子句设置为 NONE 来显式选择此策略。使用此策略时,允许所有并发 DML。

InnoDB 支持向 ALGORITHM 设置为 INPLACE 的表添加普通索引。该表未重建。该操作支持非锁定策略。可以通过将 LOCK 子句设置为 NONE 来显式选择此策略。使用此策略时,允许所有并发 DML。

MariaDB 文档中的更多信息。

于 2020-11-12T10:41:09.843 回答