Indexing 在没有表锁定的大型生产数据库中创建索引

Indexing 在没有表锁定的大型生产数据库中创建索引,indexing,mariadb,alter-table,table-locking,Indexing,Mariadb,Alter Table,Table Locking,我有一个有202M条记录的表,我需要在其中添加一些索引,但我在任何地方都找不到它(或者可能我不懂行话),如果这在MariaDB 10.3中不需要锁定就可以做到的话 我在MySQL5.6+中找到了可以实现这一点的地方,但我的google foo没有得到我关于MariaDB的任何信息 我尝试使用pt online schema change,但由于我没有任何索引(甚至没有主索引),因此这不是一个选项。这可以通过使用 ALTER ONLINE TABLE相当于LOCK=NONE。因此,圣坛 联机表语句

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

我在MySQL5.6+中找到了可以实现这一点的地方,但我的google foo没有得到我关于MariaDB的任何信息


我尝试使用pt online schema change,但由于我没有任何索引(甚至没有主索引),因此这不是一个选项。

这可以通过使用

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

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

InnoDB支持在算法设置为的表中添加主键 原地踏步。该表将被重建,这意味着所有数据都将被删除 进行了实质性的重组,并重建了索引。因此, 手术费用很高。此操作支持 非锁定策略。此策略可由以下人员明确选择: 将LOCK子句设置为NONE。当使用此策略时,所有 允许并发DML

InnoDB支持在算法设置为的表中添加普通索引 原地踏步。该表未重建。此操作支持 非锁定策略。此策略可由以下人员明确选择: 将LOCK子句设置为NONE。当使用此策略时,所有 允许并发DML


有关详细信息,请参见。

哪一版本的MariaDB?已经进行了改进(与MySQL不同步)。新的索引是什么?有些可以很快,有些不能。我们使用的是MariaDB 10.3.17。所有索引都是简单索引(没有全文)。