mysql同时update和select是否会遇到并发和性能问题?

有两个sql语句被频繁执行。

select count from TableA where id = 1

update TableA set count = count +1 where id = 1

引擎是innodb,两条语句都没在事务里。

第一句作用为查询浏览量,第二句作用为修改浏览量。

请问在高并发的情况下:
select时能否select?
select时能否update,如果可以,会有什么问题?
update时能否select,如果可以,会有什么问题?
update时能否update,如果可以,会有什么问题?

阅读 11k
2 个回答

这个问题就得看mysql的事务隔离级别了,以mysql的默认事务隔离级别Repeatable Read来解答下。

1.select时能否select?2.select时能否update,如果可以,会有什么问题?3.update时能否select,如果可以,会有什么问题?

都可以,这三个问题类似所以放一起来回答了,在Repeatable Read隔离级别下,select是不会产生锁的也不会被锁,没有什么问题。

4.update时能否update,如果可以,会有什么问题?

不能同时update,如果你上面sql的id是主键或唯一索引,会造成行锁,否则会锁整个表,在执行完update后锁才释放。

了解以下概念就清楚了

ACID
MVCC
行锁

大并发情况下对同一记录进行update 会出现大量的等待线程 因此可以了解一下MySQL线程池

另外可以使用redis进行计数 周期性的将数据同步写入MySQL

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题