我正试图在现有的一个有44,485条logging的表上创build一个新的索引。
我正在使用此查询来创build我的新索引
CREATE INDEX index_name ON table_name (field_name);
每当我运行这个我得到这个超时错误:
1205 - Lock wait timeout exceeded; try restarting transaction
这只在我的本地开发机器上,所以没有任何其他进程占用数据库。
有没有一种向现有表添加新索引的首选方法?
谢谢
用InnoDB可以增加locking超时时间:
编辑/etc/my.cnf或/etc/mysql/my.cnf(假设你的开发机器是Linux / Unix)
取消注释(或添加)该行:
innodb_lock_wait_timeout = 50
然后将设置更改为更大的数字,比如300.这是在几秒钟内。
重新启动mysql并重新运行您的查询。
或者,您可以转储数据,删除表,使用索引重新创build数据,然后将数据重新导入。或者,您可以使用索引创build新表,并将旧表的数据select到新表中。 在这两种情况下,您都可以将数据导入/复制分成更小的部分(读取:事务),这不会超过超时。