Mysql在插入操作时是否锁定表

hel*_*one 2 mysql innodb

我正在使用 Mysql(INNODB),当我执行某些插入操作时,Mysql 会锁定表吗?

我有一个巨大的表,它有很多索引。我做了一些研究,Mysql 文档说 INNODB 只锁定行而不是整个表,但我有索引,它仍然只锁定行吗?我的插入查询几乎需要 36 秒。

Query_time: 35.829970
Run Code Online (Sandbox Code Playgroud)

Ric*_*mes 6

InnoDB只会锁定行。但它最终必须更新所有索引;然而,这大多被推迟。

INSERT在36 秒的时间内是否发生了其他事情?也许是一个SELECT ... FOR UPDATE?或者在某些情况下甚至SELECT可以阻止INSERT

下次发生这种情况时,请快速SHOW FULL PROCESSLIST查看还有哪些正在运行。然后SHOW ENGINE InnoDB STATUS(希望)获得一些特定的信息INSERT以及它被阻止的原因。

你运行什么版本?较新的版本有表格可以帮助获取更多信息,即使是在事后也是如此。