兩種引擎 INNODB 於 MYISAM的區別?

2021-08-28 23:01:27 字數 1230 閱讀 8047

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 , 單獨的一行記錄加鎖

表級,直接鎖定整張表,在你鎖定期間,其它程序無法對該錶進行寫操作。如果你是寫鎖,則其它程序則讀也不允許

行級,,僅對指定的記錄進行加鎖,這樣其它程序還是可以對同乙個表中的其它記錄進行操作。

頁級,表級鎖速度快,但衝突多,行級衝突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。

Mysql儲存引擎InnoDB與Myisam的區別

1,事務處理 innodb 支援事務功能,myisam 不支援。myisam 的執行速度更快,效能更好。2,select update insert delete 操作 myisam 如果執行大量的select,myisam是更好的選擇 innodb 如果你的資料執行大量的insert或update...

MYSQL儲存引擎InnoDB和myisam區別

mysql5.5之後的預設儲存引擎 如果你為乙個表指定auto increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上 關於該計算器的演算法實現,請參考 auto increment列在...

MYSQL儲存引擎innodb和myisam的區別

innodb 預設事務型引擎,最重要最廣泛的儲存引擎,效能非常優秀,資料庫儲存在共享表空間,可以通過配置分開。對主鍵查詢的效能高於其他型別的儲存引擎。它內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash 雜湊 索引,插入資料時自動構建插入緩衝區。它可以通過一些機制和工具支援真正的熱備份,支援...