创建索引时锁定超时

创建索引时锁定超时

我正在尝试在包含 44,485 条记录的现有表上创建一个新索引。

我正在使用此查询来创建我的新索引

CREATE INDEX index_name ON table_name (field_name);

每当我运行这个程序时,我都会收到这个超时错误:

1205 - Lock wait timeout exceeded; try restarting transaction

这仅发生在我本地的开发机器上,因此没有任何其他进程占用数据库。

有没有向现有表添加新索引的首选方法?

谢谢

答案1

您可以使用 InnoDB 增加锁定超时:

编辑 /etc/my.cnf 或 /etc/mysql/my.cnf (假设你的开发机器是 Linux/Unix)

取消注释(或添加)以下行:

innodb_lock_wait_timeout = 50

并将设置更改为更大的数字,例如 300。以秒为单位。

重新启动 mysql 并重新运行查询。

或者,您可以转储数据,删除表,使用索引重新创建表,然后将数据重新导入。或者,您可以创建一个带有索引的新表,然后将旧表的数据选入新表。在这两种情况下,您都可以将数据导入/复制拆分成较小的部分(即事务),这样不会超过超时时间。

相关内容