首页 > 技术文章 > 第216天学习打卡(MySQL知识点回顾)

doudoutj 2021-08-12 22:39 原文

MySQL知识点回顾

间隙锁

当我们用范围查找条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做间隙(GAP);

InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁);

危害

因为Query执行过程中通过范围查找的话,它会锁定整个范围内所有的索引键值,即使这个键值不存在。间隙锁有一个比较致命的弱点,就当锁定一个范围键值之后,即使某些不存在的键值也会被无辜锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害。

行级锁

Innodb存储引擎由于实现了行级锁,虽然在锁定机制的实现方面所带来的性能损耗可能比表级锁要更高一些,但是整体性能方面要远远优于MyISAM的表级锁定的。当系统并发量较高是,Innodb的整体性能和MyoSAM相比就会有明显的优势。但是Innodb的行级锁定同样也有其脆弱的一面,当使用不当时,可能会让Innodb的整体性能不仅不能比MYISAM高,甚至会更差。

优化建议

尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。

合理设计索引,尽量缩小锁的范围。

尽可能较少检索条件,避免间隙锁。

尽量控制事务大小,减少锁定资源量和时间长度。

尽可能低级别事务隔离。

B站学习网址:尚硅谷MySQL数据库高级,mysql优化,数据库优化哔哩哔哩bilibili

推荐阅读