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