本篇內容介紹了“MySQL存儲引擎優缺點是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
今天主要分享常見的存儲引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,以及最常用的MyISAM與InnoDB兩個引擎 ,文章尾部有兩者的詳細比較。
MySQL常用存儲引擎介紹
1.InnoDB 引擎(MySQL5.5以后默認使用)
MySQL 5.5 及以后版本中的默認存儲引擎,他的優點如下:
災難恢復性好
支持事務
使用行級鎖
支持外鍵關聯
支持熱備份
對于InnoDB引擎中的表,其數據的物理組織形式是簇表(Cluster Table),主鍵索引和數據是在一起的,數據按主鍵的順序物理分布
實現了緩沖管理,不僅能緩沖索引也能緩沖數據,并且會自動創建散列索引以加快數據的獲取
支持熱備份
2.MyISAM引擎
特性如下:
不支持事務
使用表級鎖,并發性差
主機宕機后,MyISAM表易損壞,災難恢復性不佳
可以配合鎖,實現操作系統下的復制備份、遷移
只緩存索引,數據的緩存是利用操作系統緩沖區來實現的??赡芤l過多的系統調用且效率不佳
數據緊湊存儲,因此可獲得更小的索引和更快的全表掃描性能
3.MEMORY 存儲引擎
提供內存表,也不支持事務和外鍵。顯著提高訪問數據的速度,可用于緩存會頻繁訪問的、可以重構的數據、計算結果、統計值、中間結果。
缺點如下:
使用表級鎖,雖然內存訪問快,但如果頻繁的讀寫,表級鎖會成為瓶頸
只支持固定大小的行。Varchar類型的字段會存儲為固定長度的Char類型,浪費空間
不支持TEXT、BLOB字段。當有些查詢需要使用到臨時表(使用的也是MEMORY存儲引擎)時,如果表中有TEXT、BLOB字段,那么會轉換為基于磁盤的MyISAM表,嚴重降低性能
由于內存資源成本昂貴,一般不建議設置過大的內存表,如果內存表滿了,可通過清除數據或調整內存表參數來避免報錯
服務器重啟后數據會丟失,復制維護時需要小心
MySQL存儲引擎MyISAM與InnoDB如何選擇
1.兩種存儲引擎的大致區別表現在:
1)InnoDB支持事務,MyISAM不支持,這一點是非常之重要。事務是一種高級的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而MyISAM就不可以了。
2)MyISAM適合查詢以及插入為主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用
3)InnoDB支持外鍵,MyISAM不支持
4)從MySQL5.5.5以后,InnoDB是默認引擎
5)InnoDB不支持FULLTEXT類型的索引
6)InnoDB中不保存表的行數,如select count(*) from table時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含where條件時MyISAM也需要掃描整個表。
7)對于自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯合索引。
8)清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表。
9)InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'
有人說MYISAM只能用于小型應用,其實這只是一種偏見。
如果數據量比較大,這是需要通過升級架構來解決,比如分表分庫,讀寫分離,而不是單純地依賴存儲引擎。
現在一般都是選用InnoDB了,主要是MyISAM的全表鎖,讀寫串行問題,并發效率鎖表,效率低,MyISAM對于讀寫密集型應用一般是不會去選用的。
“MySQL存儲引擎優缺點是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。