无法使用InnoDB在字段上添加索引?

时间:2010-07-20 00:54:12

标签: mysql indexing innodb

嘿所有,我有一个innodb表,我正在尝试运行索引,我收到以下错误:

Deadlock found when trying to get lock; try restarting transaction

语法为:

ALTER TABLE mytable ADD INDEX (fieldtoindex);

关于为什么会引发死锁错误的任何想法?谢谢!

1 个答案:

答案 0 :(得分:0)

您没有提供足够的信息来回答您的问题。

对于InnoDB,作为一般规则,当出现错误时,请查看SHOW ENGINE INNODB STATUS的输出。您希望在命令行客户端中运行此命令,并以\ G(反斜杠大写G)结束命令以使输出可读。

在您的情况下,相关信息将位于SHOW ENGINE INNODB STATUS输出的顶部,其中显示类似

的内容
------------------------
LATEST DETECTED DEADLOCK
------------------------
100720 14:27:32
*** (1) TRANSACTION:
TRANSACTION 3 572739397, ACTIVE 2 sec, process no 3057, OS thread id 1362831680 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216, 3 row lock(s)
MySQL thread id 37496388, query id 1645924019 host 10.147.209.20 db Updating
update t set aid='4921978'  where id in (302885,303582,303907,303911)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 36004 page no 147 n bits 216 index `PRIMARY` of table `db`.`t` trx id 3 572739397 lock_mode X locks rec but not gap waiting
Record lock, heap no 43 PHYSICAL RECORD: n_fields 19; compact format; info bits 0

列出了相关的表和索引名称,以及所涉及的语句。有了这些信息,您的问题就变得可以调试了。

有关详细信息,另请参阅http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through/

如果更频繁地发生这种情况,请查看http://freshmeat.net/projects/innotop,“D”屏幕(死锁显示)。