一条update语句会锁住多少数据?作为一名开发工程师,大家平时有去想过这样的问题吗?那么既然打开了,我们一起来看看。
本文数据库隔离级别为:可重复读,存储引擎为Innodb
有一天我在给小张进行code review,熟悉的mybatis代码,没有一条SQL,代码翻译成SQL如下:
update key_word_info set count = count + 1 where user_id = 123;
我:你在user_id 上加索引了吗?
小张:好像没有额。。。。。
我:那你知道这条SQL执行后会锁住多少数据?
小张:一个表?
同学们应该发现了,这一条SQL会把整个表都锁住,导致其他线程没有办法写入数据,严重影响了我们的写入的并发能力。
我接着问小张
我:你觉得在user_id 上加上索引会怎样?
alter table key_word_info add index(user_id);
小张:是对找出来的那几条数据加上锁?
我:我们要不实践一下?
于是我们列举了一些数据