InnoDB和MyISAM的區別

2021-10-24 00:26:51 字數 1089 閱讀 9534

1.myisam是預設表型別不是事務安全的;innodb支援事務。

2.myisam不支援外來鍵;innodb支援外來鍵。

3.myisam支援表級鎖(不支援高併發,以讀為主);innodb支援行鎖(共享鎖,排它鎖,意向鎖),粒度更小,但是在執行不能確定掃瞄範圍的sql語句時,innodb同樣會鎖全表。

4.執行大量select,myisam是最好的選擇;執行大量的update和insert最好用innodb。

5.myisam在磁碟上儲存上有三個檔案.frm(儲存表定義)  .myd(儲存表資料)  .myi(儲存表索引);innodb磁碟上儲存的是表空間資料檔案和日誌檔案,innodb表大小只受限於作業系統大小。

6.myisam使用非聚集索引,索引和資料分開,只快取索引;innodb使用聚集索引,索引和資料存在乙個檔案。

7.myisam儲存表具體行數;innodb不儲存。

8.delete from table時,innodb不會重新簡歷表,而會一行一行的刪除。

索引由b+樹構成,執行查詢操作的時候會先搜尋b+樹,如果找到對應葉子結點會,根據葉子節點的值(位址),拿出整行資料。

上圖是innodb主索引(同時也是資料檔案)的示意圖,可以看到葉節點包含了完整的資料記錄。這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。

這裡以英文本元的ascii碼作為比較準則。聚集索引這種實現方式使得按主鍵的搜尋十分高效,但是輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。

MySQL中MyISAM與InnoDB區別

mysql中myisam與innodb區別 myisam innodb 事物處理 不支援支援 外來鍵不支援 支援行鎖 不支援支援 全文索引 支援不支援 表的具體行數 儲存表的具體行數 掃瞄表來計算行數 delete表時 先drop表,然後重建表 一行一行的刪除 索引和資料 分開的,並且索引是有壓縮的...

MySQL中MyISAM與InnoDB區別及選擇

innodb 支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄...

MySQL中MyISAM與InnoDB區別及選擇

支援事務處理等 不加鎖讀取 支援外來鍵 支援行鎖 不支援fulltext型別的索引 不儲存表的具體行數,掃瞄表來計算有多少行 delete 表時,是一行一行的刪除 innodb 把資料和索引存放在表空間裡面 跨平台可直接拷貝使用 innodb中必須包含auto increment型別欄位的索引 很難...