公众号merlinsea
mysql中的锁机制
背景
在数据库中存储的数据记录是由多个用户共享访问的,因此当多个用户同时操作数据库的时候,存在数据的不一致性的问题。这就需要通过数据库的锁机制来保障在同一时刻只能有一个用户操作数据记录。
锁的分类
行锁和表锁的使用建议
InnoDB⾏锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使⽤⾏级锁,否则,InnoDB将默认使⽤表锁。因此,查询的语句尽可能走索引,可以提高并发访问量。
mysql的死锁
当两个或以上的事务相互持有锁和请求对方已经加锁的资源,并形成⼀个循环的依赖关系,就会产⽣死锁。多个事务同时锁定同⼀个资源时,也会产⽣死锁。在⼀个事务系统中,死锁是确切存在并且是不能完全避免的。
只有使用行级锁的时候才会可能出现死锁,表级锁由于对全表加锁,是不会产生死锁现象的。
避免死锁的tips
在程序中,操作多张表时,尽量以相同的顺序来访问(避免形成等待环路)
批量操作单张表数据的时候,先对数据进⾏排序(避免形成等待环路)
⼤事务化成⼩事务,甚⾄不开启事务
尽量使⽤索引访问数据,避免没有 where 条件的操作,避免锁表然后⾛索引记录锁,没⾛索引表锁
大表优化问题
背景
随着业务的发展,互联网企业所使用的数据库会堆积非常多的数据记录,这些数据记录可能是每条记录的字段数量过多,可能是这张表的记录的条数过多,总之上述的方案中都是数据库的单表数据量过大问题。这些问题会导致查询性能降低,查询到的数据记录传输的时候也会占用过大的带宽资源。
关于leetcode算法训练营:
加我微信号私聊参加训练营~
本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等等,所以快加入训练营吧,我们一起进步
奔跑的小梁,公众号:梁霖编程工具库算法训练营,快来参加