我有一个包含 202M 记录的表,我需要在其中添加一些索引,如果在 MariaDB 10.3 中可以在不锁定的情况下这样做,我在任何地方都找不到它(或者我可能不懂术语)。
我发现了这篇文章,我可以看到这在 MySQL 5.6+ 中是可能的,但是我的 google foo 没有得到我关于 MariaDB 的任何信息。
我尝试使用 pt-online-schema-change 但由于我没有任何不是选项的索引(甚至不是主索引)。
我有一个包含 202M 记录的表,我需要在其中添加一些索引,如果在 MariaDB 10.3 中可以在不锁定的情况下这样做,我在任何地方都找不到它(或者我可能不懂术语)。
我发现了这篇文章,我可以看到这在 MySQL 5.6+ 中是可能的,但是我的 google foo 没有得到我关于 MariaDB 的任何信息。
我尝试使用 pt-online-schema-change 但由于我没有任何不是选项的索引(甚至不是主索引)。
这可以通过使用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 文档中的更多信息。