MySQL有哪些儲存引擎,各自的優缺點,應用場景
經常面試都會問到MYSQL有哪些儲存引擎,以及各自的優缺點。今天主要分享常見的儲存引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,以及最常用的MyISAM與InnoDB兩個引擎 ,文章尾部有兩者的詳細比較。
MySQL常用儲存引擎介紹
1.InnoDB 引擎(MySQL5.5以後預設使用)
MySQL 5.5 及以後版本中的預設儲存引擎,他的優點如下:
災難恢復性好
支援事務
使用行級鎖
支援外來鍵關聯
支援熱備份
對於InnoDB引擎中的表,其資料的物理組織形式是簇表(Cluster Table),主鍵索引和資料是在一起的,資料按主鍵的順序物理分佈
實現了緩衝管理,不僅能緩衝索引也能緩衝資料,並且會自動建立雜湊索引以加快資料的獲取
支援熱備份
2.MyISAM引擎
特性如下:
不支援事務
使用表級鎖,併發性差
主機當機後,MyISAM表易損壞,災難恢復性不佳
可以配合鎖,實現作業系統下的複製備份、遷移
只快取索引,資料的快取是利用作業系統緩衝區來實現的。可能引發過多的系統呼叫且效率不佳
資料緊湊儲存,因此可獲得更小的索引和更快的全表掃描效能
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對於讀寫密集型應用一般是不會去選用的。
總之:
1.MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。
2.MyISAM型別的表強調的是效能,其執行速度比InnoDB型別更快,但是不提供事務支援,而InnoDB提供事務支援已經外部鍵等高階資料庫功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555151/viewspace-2215071/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 三種雲原生儲存方案優缺點及應用場景分析
- Redis的應用場景及優缺點Redis
- Node.js 優缺點以及應用場景Node.js
- Linux系統和Windows系統的各自的優缺點有哪些LinuxWindows
- Socket 與 Http區別 優缺點及應用場景HTTP
- 什麼是閉包?有哪些使用場景?優缺點是什麼?
- TokuDB的優缺點和適用場景介紹
- Python的優缺點和應用領域有哪些? 【詳細】Python
- iframe有哪些優點和缺點?
- 哪些應用場景能使用摩杜雲物件儲存MOS?物件
- MySQL Json有哪些缺點MySqlJSON
- NodeJS優缺點及適用場景討論NodeJS
- 區塊鏈應用場景有哪些?區塊鏈
- 影片直播場景下物件儲存的應用物件
- 23種設計模式(概念、原則、場景、優點、缺點、應用)簡述設計模式
- SQL Server儲存過程的優缺點SQLServer儲存過程
- 動態IP代理的應用場景有哪些?
- IP歸屬地的應用場景有哪些?
- 美顏SDK有哪些優勢?可以應用到哪些場景?
- 不同場所應用的互動塗鴉有哪些優點?
- 物件儲存適用於哪些場景?這5個場景皆可使用!物件
- RPA 技術的優缺點有哪些
- HTTPS協議的優缺點有哪些?HTTP協議
- 圖資料庫有哪些應用場景?資料庫
- 小談mysql儲存引擎優化MySql儲存引擎優化
- 使用儲存過程做orm有什麼優缺點嗎?儲存過程ORM
- 大資料的優缺點有哪些?_光點科技大資料
- 線性表順序儲存優缺點,線性連結串列的優缺點
- Kafka和RabbitMQ有哪些區別,各自適合什麼場景?KafkaMQ
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- ERP系統有哪些優點和缺點?
- 單頁應用的優缺點
- Linux作業系統的優勢官方開發App應用程式有哪些優缺點?Linux作業系統APP
- 虛擬伺服器的優缺點有哪些?伺服器
- 美顏濾鏡SDK有哪些應用場景?
- js裝飾者模式有哪些應用場景JS模式
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- MySQL 儲存引擎MySql儲存引擎