mysql的 InnoDB 和 MyISAM 區別

1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
3.對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。

另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”

 

 

 【12/09/16 附加】

MyISAM 不支持外鍵和事務,innodb 支持

MyISAM 和 Innodb 對數據信息的存儲處理方式不同。

 

MYISAM 引擎的表 創建數據表時會創建三個文件,

frm 表結構文件

myd 數據文件

myi 索引文件

 

Innodb 引擎的表只創建一個

frm 表結構文件

而數據文件在 data目錄下的 ibdate1 文件內。(所有庫中所有表的數據都保存在這裏)

 

在刪除不同引擎的表數據時也有不同的結果

對於 MyISAM 引擎的表來說 刪除數據 他不會重新整理數據表以及索引表。

所以需要定期清理 MyISAM 引擎的表 通常的做法是

optimize table  表名

他會重列數據表以及索引表,也是對錶的一種優化的手段。

 

另外在導入(插入)大批量數據時候

對於 MyISAM

alter table 表名 disable keys;    

導入數據

alter table 表名 enable keys;

 

對於 innodb

1:將要導入的數據按照主鍵排序

2:set unique_checks=0 關閉 唯一性效驗

3:set autocommit=0 關閉自動提交

發佈了41 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章