資料庫引擎比較詳解 MyISAM與InnoDB

2021-08-18 14:25:46 字數 1166 閱讀 4402

這裡設表一共有三列,假設我們以col1為主鍵,則上圖是乙個myisam表的主索引(primary key)示意。可以看出myisam的索引檔案僅僅儲存資料記錄的位址。在myisam中,主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。因此,myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。myisam的索引方式也叫做「非聚集」的。

因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵

innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址,聚集索引這種實現方式使得按主鍵的搜尋十分高效,但是輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大

聚集索引與非聚集索引:

mvcc:多版本併發控制

先理解併發和並行的區別

select

innodb會根據以下兩個條件檢查每行記錄:

a.innodb只會查詢版本早於當前事務版本的資料行(也就是,行的系統版本號小於或等於事務的系統版本號),這樣可以確保事務讀取的行,要麼是在事務開始前已經存在的,要麼是事務自身插入或者修改過的.

b.行的刪除版本要麼未定義,要麼大於當前事務版本號,這可以確保事務讀取到的行,在事務開始之前未被刪除.

只有a,b同時滿足的記錄,才能返回作為查詢結果.

delete

innodb會為刪除的每一行儲存當前系統的版本號(事務的id)作為刪除標識.

資料庫引擎 InnoDB和MyISAM

innodb是mysql預設的儲存引擎 通過命令列 mysql show engine可以檢視mysql支援的引擎。在mac下 mysql安裝在 usr local mysql 啟動sql usr local mysql 5.6.40 macos10 13 x86 64 bin mysql u ro...

mysql資料庫引擎 MyISAM和InnoDB

mysql 優化系列 一 mysql資料庫引擎效能測試 mysql 資料庫中,最常用的兩種引擎是innordb和myisam。innordb的功能要比myiasm強大很多,但是innordb的效能要比myisam差很多,如果你的 只是做簡單的查詢,更新,刪除,那麼用myiasm是最好的選擇。所有的效...

關於資料庫引擎InnoDB和Myisam區別

一生熱愛 回頭太難。在mysql5.5之前,預設使用的是myisam引擎,5.5之後,預設使用innodb引擎。關於二者區別一直是重要的問題,選擇合適的資料庫引擎對於開發的幫助是巨大的。myisam不支援事務,因此在開發中需要使用事務的優先選擇innodb,況且在需求越來越複雜的時代,事務按理說是必...