1. 程式人生 > >兩種引擎:INNODB 於 MYISAM的區別?

兩種引擎:INNODB 於 MYISAM的區別?

1:區別

a:事物處理:

MYISAM是非事務安全型的,   INNODB 是事務安全型 的(支援事務處理等高階處理);

b:鎖機制不同:

MYISAM是表級鎖   INNODB是行級鎖;

c:select ,update,delete,insert的操作:

MYISAM:如果執行大量的select,MYISAM是最好的選擇;

INNODB:如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表;

d:查詢表的行數不同;

MyISAM:select count(*) from table,MyISAM只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含   where條件時,兩種表的操作是一樣的

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

e:外來鍵支援:

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)表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況。

頁級:引擎 BDB。 表級:引擎 MyISAM , 理解為鎖住整個表,可以同時讀,寫不行 行級:引擎 INNODB , 單獨的一行記錄加鎖

表級,直接鎖定整張表,在你鎖定期間,其它程序無法對該表進行寫操作。如果你是寫鎖,則其它程序則讀也不允許 行級,,僅對指定的記錄進行加鎖,這樣其它程序還是可以對同一個表中的其它記錄進行操作。 頁級,表級鎖速度快,但衝突多,行級衝突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。