我正在尝试在包含 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 并重新运行查询。
或者,您可以转储数据,删除表,使用索引重新创建表,然后将数据重新导入。或者,您可以创建一个带有索引的新表,然后将旧表的数据选入新表。在这两种情况下,您都可以将数据导入/复制拆分成较小的部分(即事务),这样不会超过超时时间。