MySQL InnoDB和MyIsam引擎的區別

2021-08-17 02:18:23 字數 983 閱讀 7405

1. 區別:

(1)事務處理:

myisam是非事務安全型的,而innodb是事務安全型的(支援事務處理等高階處理);

(2)鎖機制不同:

myisam是表級鎖,而innodb是行級鎖;

(3)select ,update ,insert ,delete 操作:

myisam:如果執行大量的select,myisam是更好的選擇

innodb:如果你的資料執行大量的insert或update,出於效能方面的考慮,應該使用innodb表

(4)查詢表的行數不同:

myisam:select count(*) from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含  

where條件時,兩種表的操作是一樣的

innodb : innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行

(5)外來鍵支援:

mysiam表不支援外來鍵,而innodb支援

2. 為什麼myisam會比innodb 的查詢速度快。

innodb在做select的時候,要維護的東西比myisam引擎多很多;

1)資料塊,innodb要快取,myisam只快取索引塊,  這中間還有換進換出的減少; 

2)innodb定址要對映到塊,再到行,myisam 記錄的直接是檔案的offset,定位比innodb要快

3)innodb還需要維護mvcc一致;雖然你的場景沒有,但他還是需要去檢查和維護

mvcc ( multi-version concurrency control )多版本併發控制 

3. 應用場景

myisam適合:(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。

innodb適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況。

MySQL InnoDB事務和鎖

innodb中的事務遵循了acid原則 read uncommit 最鬆散的級別 read commit 可解決髒讀問題 rc級別下 repeatable read mysql預設的級別,可解決幻讀問題 serializabale 最嚴格的級別,基於鎖序列執行事務 輸出中transactions一節...

MySQL InnoDB和MyISAM引擎的區別

innodb 支援 myisam 不支援 innodb 將資料表分成2個部分儲存,字尾為frm的檔案儲存表結構,字尾為ibd的檔案儲存資料和索引 myisam 將資料表分成3個部分儲存,字尾為frm的檔案儲存表結構,字尾為myd的檔案儲存資料,字尾為myi的檔案儲存索引 innodb 支援行級鎖,行...

Mysql Innodb和MyISAM的區別

1 事務 2 外來鍵 3 鎖機制 4 增刪改查 5 全文索引 6 儲存結構 索引區別 詳見 索引和二級索引 myisam表分為三個檔案儲存,資料和索引分開儲存 表定義檔案 frm 資料檔案的 myd mydata 索引檔案 myi myindex myisam的索引也是b tree,但是myisam...