当前位置 - 股票行情交易網 - 國際漫評 - Mysql數據庫3種存儲引擎有什麽區別?

Mysql數據庫3種存儲引擎有什麽區別?

Mysql數據庫3種存儲(MyISAM、MEMORY、InnoDB)引擎區別:

1、Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。MEMORY、InnoDB不是默認存儲引擎。

2、InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差壹些並且會占用更多的磁盤空間以保留數據和索引。

Mysql數據庫3種存儲(MyISAM、MEMORY、InnoDB)區別對比:

1、MyISAM

它不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT為主的應用基本都可以使用這個引擎來創建表。

數據文件和索引文件可以放置在不同的目錄,平均分配IO,獲取更快的速度。要指定數據文件和索引文件的路徑,需要在創建表的時候通過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑需要使用絕對路徑。

2、MEMORY

memory使用存在內存中的內容來創建表。每個MEMORY表實際對應壹個磁盤文件,格式是.frm。MEMORY類型的表訪問非常快,因為它到數據是放在內存中的,並且默認使用HASH索引,但是壹旦服務器關閉,表中的數據就會丟失,但表還會繼續存在。

默認情況下,memory數據表使用散列索引,利用這種索引進行“相等比較”非常快,但是對“範圍比較”的速度就慢多了。因此,散列索引值適合使用在"="和"<=>"的操作符中,不適合使用在"<"或">"操作符中,也同樣不適合用在order by字句裏。如果確實要使用"<"或">"或betwen操作符,可以使用btree索引來加快速度。

存儲在MEMORY數據表裏的數據行使用的是長度不變的格式,因此加快處理速度,這意味著不能使用BLOB和TEXT這樣的長度可變的數據類型。VARCHAR是壹種長度可變的類型,但因為它在MySQL內部當作長度固定不變的CHAR類型,所以可以使用。

3、InnoDB

InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差壹些並且會占用更多的磁盤空間以保留數據和索引。

(1)自動增長列:

InnoDB表的自動增長列可以手工插入,但是插入的如果是空或0,則實際插入到則是自動增長後到值。可以通過"ALTER TABLE...AUTO_INCREMENT=n;"語句強制設置自動增長值的起始值,默認為1,但是該強制到默認值是保存在內存中,數據庫重啟後該值將會丟失。

可以使用LAST_INSERT_ID()查詢當前線程最後插入記錄使用的值。如果壹次插入多條記錄,那麽返回的是第壹條記錄使用的自動增長值。對於InnoDB表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第壹列,但是對於MyISAM表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引到前面幾列排序後遞增的。

(2)外鍵約束:

MySQL支持外鍵的存儲引擎只有InnoDB,在創建外鍵的時候,父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對應的索引。