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 語句中包括多個條件 時,要建立複合索引,減小死鎖的可能性.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章