MySQL------什么时候使用表级锁

对于InnoDB表,在绝大多数的情况下都应该使用行级锁,因为事务和行级锁往往是我们选择InnoDB表的理由。但是在个别特殊的事务中,也可以考虑使用表级锁。

  • 第一种情况:
    事务需要更新大部分或者是更新全部数据,表又非常大,在这种情况下,如果使用默认的行级锁,不仅会导致这个事务的执行效率低,而且可能会造成其他事务长时间锁等待和锁冲突,这种情况下可以考虑使用表级锁来提高该事务的执行速度。

  • 第二种情况:
    事务涉计多个表,比较复杂,很可能引起死锁,造成大量事务回滚。这种情况可以考虑一次性锁定事务涉及的表,从而避免死锁、减少数据库因事务回滚带来的开销。
    当然,应用中事务不能太多,否则,就应该考虑MyISAM表。
    表锁和行锁的应用场景:
    表级锁使用与并发性不高,以查询为主,少量更新的应用,比如小型的web应用;
    行级锁适用于高并发环境下,对事物完整性要求比较高的系统,比如在线处理系统。

说下行锁和表锁的区别:

  • 行锁:锁定粒度小,开销大,加锁慢,会出现死锁,并发度高,发生锁冲突概率低
  • 表锁:锁定粒度大,开销小,加锁快,不会出现死锁,并发度低,发生锁冲突概率高
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐