網上寫MySQL的文章比較多,但對數據庫引擎介紹的文章比較少,無論是汽車、飛機還是MySQL,引擎都堪稱靈魂,今天就簡單說說MySQL的兩大數據引擎MyISAM和InnoDB。
首先我們來看看MySQL的整體架構是怎么樣的?
MySQL整體分為三層:
(1)客戶端,提供統一的接口,讓各種編程語言去實現connector;
(2)MySQL服務,內部包含各種組件,實現各種功能;
(3)文件系統,數據存儲與日志;
其中,MySQL服務中,可以以插件的形式,實現各種存儲引擎。
在各種存儲引擎中,MyISAM和InnoDB是使用范圍最廣的。
MyISAM是怎么樣的?
(1)MyISAM是MySQL 5.5版本之前的默認數據庫引擎;
(2)MyISAM強調的是性能,每次查詢具有原子性,是不提供事務支持;
(3)MyISAM只支持表級鎖;
(4)MyISAM索引和數據分離,天生非聚簇索引,最多有一個unique的性質,這樣在內存里可以緩存更多的索引,對查詢的性能會更好,適用于那種少量的插入,大量查詢的場景;
MyISAM適用于什么場景?
基于MySQL,搭建J2EE的在線報表查詢Web系統,是最適合MyISAM存儲引擎的,因為并不需要事務支持,就是在最初的時候一次性批量導入大量數據,然后基于這些屬于開始查詢
InnoDB是怎么樣的?
(1)InnoDB支持事務,它的AUTO_COMMIT默認是打開的。意味著每條SQL語句都會被默認封裝成一個事務,自動提交;
(2)InnoDB支持行級鎖,這是它的最大特色。行鎖大幅度提高了多用戶并發操作的性能;
(3)InnoDB引擎表的所有內容都保存在同一個數據文件中,索引和數據并不分開;
(4)InnoDB需要更多的內存和存儲,它會在主內存中建立其專用的緩沖池用于高速緩沖數據和索引;
如果大家對事務、聚餐/非聚餐索引、MVCC等概念還不是很了解的話,后續我會帶來更多相關文章
知其然,知其所以然,希望大家有收獲。
歡迎關注同名公眾號【程序員大帝】,更多原創精品內容