我正在使用 Mysql(INNODB),当我执行某些插入操作时,Mysql 会锁定表吗?
我有一个巨大的表,它有很多索引。我做了一些研究,Mysql 文档说 INNODB 只锁定行而不是整个表,但我有索引,它仍然只锁定行吗?我的插入查询几乎需要 36 秒。
Query_time: 35.829970
Run Code Online (Sandbox Code Playgroud)
InnoDB只会锁定行。但它最终必须更新所有索引;然而,这大多被推迟。
INSERT
在36 秒的时间内是否发生了其他事情?也许是一个SELECT ... FOR UPDATE
?或者在某些情况下甚至SELECT
可以阻止INSERT
。
下次发生这种情况时,请快速SHOW FULL PROCESSLIST
查看还有哪些正在运行。然后SHOW ENGINE InnoDB STATUS
(希望)获得一些特定的信息INSERT
以及它被阻止的原因。
你运行什么版本?较新的版本有表格可以帮助获取更多信息,即使是在事后也是如此。