答案 0 :(得分:1)
如果您的事务隔离级别为REPEATABLE READ或更低,则SELECT语句不会创建锁定,除非您使用“FOR UPDATE”。
检查你的txn隔离级别是什么。
无需使用READ UNCOMMITTED,甚至READ COMMITTED。只是避免SERIALIZABLE。
另一方面,select语句仍将耗尽可能影响机器行为的资源。
您是否在4M行表上进行全表扫描?
答案 1 :(得分:0)
(根据MarkR的回答重读后编辑)
InnoDb交易的online help text非常好。默认隔离级别是可重复读取。根据MarkR的回答,默认隔离级别的SELECT不会发出行锁,并且在其事务处于打开状态时不会阻止更新或插入。
如果您在serializable(最高隔离级别)上运行,则可以使用以下命令恢复默认值:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
这仅更改当前会话的隔离级别。