Mysql兩種主要資料引擎的區別
InnoDB和MyISAM是在使用MySQL最常用的兩個表型別,它們各有各的優點,視具體應用而定。
Innodb引擎(該引擎在5.5後的MySQL資料庫中為預設儲存引擎。)
Innodb引擎提供了對資料庫ACID事務的支援,並且實現了SQL標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標就是處理大容量資料庫系統,它本身其實就是基於MySQL後臺的完整的資料庫系統,MySQL執行時,Innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援FULLTEXT型別的索引,而且它啟動也比較慢,不會儲存表的行數,當執行SELECT COUNT(*) FROM TABLE指令時,需要掃描全表。當需要使用資料庫事務時,該引擎就是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高的場景下,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。大容量的資料集時趨向於選擇Innodb。因為它支援事務處理和故障的恢復。Innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在Innodb也是比較快的。Innodb引擎的索引的資料結構是B+樹,只不過資料結構中儲存的都是實際的資料,這種索引有被稱為聚集索引。
MyIASM引擎(該引擎在5.5前的MySQL資料庫中為預設儲存引擎。)
MyISAM沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵。因此當執行INSERT插入或UPDATE更新語句時,即執行寫操作需要鎖定整個表,所以會導致效率降低。不過和Innodb不同的是,MyISAM引擎中儲存了表的行數,於是當執行SELECT COUNT(*) FROM TABLE時,可以直接讀取已經儲存好的值而不需要進行全表掃描。所以,如果表的讀操作遠遠多於寫操作,而且不需要資料庫事務的支援,可以將MyIASM作為資料庫引擎的首選。大批量的插入語句時(這裡是INSERT語句)在MyIASM引擎中執行的比較快,但是UPDATE語句在Innodb下執行的會比較快,尤其是在併發量大的時候。MyIASM引擎,B+樹的資料結構中儲存的內容實際上是實際資料的地址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。
區別介紹:
1、MyISAM是非事務安全的,而InnoDB是事務安全的
2、MyISAM鎖的粒度是表級的,而InnoDB支援行級鎖
3、MyISAM支援全文型別索引,而InnoDB不支援全文索引
4、MyISAM相對簡單,效率上要優於InnoDB,小型應用可以考慮使用MyISAM
5、MyISAM表儲存成檔案形式,跨平臺使用更加方便
使用場景:
1、MyISAM管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果在應用中執行大量select操作,應該選擇MyISAM
2、InnoDB用於事務處理,具有ACID事務支援等特性,如果在應用中執行大量insert和update操作,應該選擇InnoDB
3、大尺寸的資料集趨向於選擇InnoDB引擎,因為它支援事務處理和故障恢復。資料庫的大小決定了故障恢復的時間長短,InnoDB可以利用事務日誌進行資料恢復,這會比較快。主鍵查詢在InnoDB引擎下也會相當快,不過需要注意的是如果主鍵太長也會導致效能問題。
相關文章
- MySql三種常見引擎及其區別MySql
- MySQL建立資料庫的兩種方法MySql資料庫
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- 火山引擎張雷:圖資料庫選型主要看兩點—資料是否高度互聯及資料操作型別資料庫型別
- 資料探勘與資料分析的主要區別是什麼
- MySQL防止delete命令刪除資料的兩種方法MySqldelete
- 動態代理的兩種方式以及區別
- 建立連結串列兩種方法的區別
- Mysql資料庫使用from與join兩表查詢的方法區別總結MySql資料庫
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MPP與Hadoop,兩種主流大資料系統架構有啥區別?Hadoop大資料架構
- tp5 db函式的兩種區別函式
- 定義函式的兩種形式及區別函式
- Golang兩種執行流程以及區別Golang
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- MySQL常見的兩種儲存引擎:MyISAM與InnoDB的愛恨情仇MySql儲存引擎
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- [MySQL光速入門]022 插入資料的兩種方式(番外)MySql
- MySQL資料庫中的四種隔離級別MySql資料庫
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- GET和POST兩種基本請求方法的區別
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- mysql資料庫date 、datetime、time、timestamp區別MySql資料庫
- 兩種簡單分析和優化MySQL資料庫表的方法優化MySql資料庫
- Mysql兩種情況下更新欄位中部分資料的方法MySql
- 解決MySQL的主從資料庫沒有同步的兩種方法MySql資料庫
- 瀏覽器引擎、渲染引擎與JavaScript引擎的區別瀏覽器JavaScript
- VUE的兩種跳轉push和replace對比區別Vue
- MySQL 的資料型別MySql資料型別
- mysql中數值型資料有哪兩個類別?MySql
- MySQL部分引擎的資料檔名稱作用MySql
- 【Mysql】InnoDB 引擎中的資料頁結構MySql
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- SAML和OAuth2這兩種SSO協議的區別OAuth協議
- GitOps中推送與拉取兩種風格的區別 – thenewstackGit
- 說說自己對於 MySQL 常見的兩種儲存引擎:MyISAM與 InnoDB的理解MySql儲存引擎
- 前端框架路由實現的Hash和History兩種模式的區別前端框架路由模式
- JavaScript建立閉包的兩種方式的優劣與區別分析JavaScript