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,在創建外鍵的時候,父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對應的索引 。
BDE(BorlandDatabaseEngine)是Inprise公司的數據庫引擎 。
這個術語與其他所有縮寫相似,因為它也可以代表許多其他東西 。
它可以代表的一些其他事情是“初學者司機教育”,“批量數據加密”,“基本數據輸入”,“總線驅動器錯誤”和“基本設計工程” 。
數據庫引擎是用于存儲、處理和保護數據的核心服務 。利用數據庫引擎可控制訪問權限并快速處理事務,從而滿足企業內大多數需要處理大量數據的應用程序的要求 。
【Mysql數據庫3種存儲引擎有什么區別?】建立索引可以加快查詢速度,索引就好比是圖書館中的卡片 。

    推薦閱讀