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建立資料庫的兩種方法MySql資料庫
- MySQL 資料庫 InnoDB 和 MyISAM 資料引擎的差別MySql資料庫
- 兩種增量備份的區別!
- Mysql innodb引擎和myisam引擎使用索引區別MySql索引
- 火山引擎張雷:圖資料庫選型主要看兩點—資料是否高度互聯及資料操作型別資料庫型別
- 資料探勘與資料分析的主要區別是什麼
- hash和history兩種模式的區別模式
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- vue-router的兩種模式的區別Vue模式
- 【轉】Mysql兩種儲存引擎的異同【MyISAM和InnoDB】MySql儲存引擎
- 動態代理的兩種方式以及區別
- javascript兩種宣告函式方式的區別JavaScript函式
- 建立連結串列兩種方法的區別
- MySQL防止delete命令刪除資料的兩種方法MySqldelete
- 連線MySQL資料庫的兩種方式介紹MySql資料庫
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- Mysql引擎中MyISAM和InnoDB的區別有哪些?MySql
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- Mysql資料庫使用from與join兩表查詢的方法區別總結MySql資料庫
- tp5 db函式的兩種區別函式
- 定義函式的兩種形式及區別函式
- Golang兩種執行流程以及區別Golang
- MySQL 五種整型資料型別的範圍與區別 tinyint smallint mediumint int bigintMySql資料型別
- MPP與Hadoop,兩種主流大資料系統架構有啥區別?Hadoop大資料架構
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- MySQL常見的兩種儲存引擎:MyISAM與InnoDB的愛恨情仇MySql儲存引擎
- GET和POST兩種基本請求方法的區別
- C++中建立物件的兩種方法及其區別C++物件
- Javascript中兩種方式定義函式的區別JavaScript函式
- MySQL資料庫中的四種隔離級別MySql資料庫
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- 瀏覽器引擎、渲染引擎與JavaScript引擎的區別瀏覽器JavaScript
- Java的主要資料型別(Primitive)Java資料型別MIT