MYSQL运行原理

1. 原理

  • mysql是同由连接池、SQL接口、解析器、优化器、缓存、存储引擎组成的。
  • Mysql支持的存储引擎有很多,它是mysql中具体与文件打交道的子系统,最常用的用MyISAM,InnoDB.
  • MyISAM查询快,但不支持事务,不支持外键。InnoDB支持事务,并提供行级锁定,是其默认的存储引擎。

 ## 2.日志

  • MySQL中有三种日志文件,redo log、bin log、undo log。
  • redo log 是 存储引擎层(innodb)生成的日志,主要为了保证数据的可靠性;
  • bin log 是 MySQL 数据库层面上生成的日志,主要用于 point in time 恢复和主从复制。
  • undo log 主要用于事务的回滚(undo log 记录的是每个修改操作的逆操作) 和 一致性非锁定读(undo log 回滚行记录到某种特定的版本---MVCC 多版本并发控制)。

3.数据结构

MySQL索引的数据结构是采用B+树。https://www.cnblogs.com/lianzhilei/p/11250589.html

4.死锁

非主键更新时引起死锁

  • 主键更新时会锁住主键索引,非主键索引更新时,会先锁住非主键索引,再锁定主键索引。 如:update good set status= '1' where title= '商品'
  • 建议:默认更新时,先获取需要更新的记录的主键,再通过主键更新记录避免死锁。

无索引更新时引起死锁

  • InnoDB 的行锁是通过给索引上的索引项加锁来实现的,意味着只有通过索引条件检索数据,才能使用行级锁,否则将使用表锁。
  • 建议:相关条件字段加索引;

多线程更新时引发死锁

  • 当where 语句中包括多个条件 时,要建立复合索引,减小死锁的可能性.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章