Mysql 中 MyISAM 和 InnoDB 的區別
一、區別
- InnoDB 支援事務,MyISAM 不支援事務。這是 MySQL 將預設儲存引擎從 MyISAM 變成 InnoDB 的重要原因之一;
- InnoDB 支援外來鍵,而 MyISAM 不支援。對一個包含外來鍵的 InnoDB 錶轉為 MYISAM 會失敗;
- InnoDB 不儲存表的具體行數,執行 select count(*) from table 時需要全表掃描。而MyISAM 用一個變數儲存了整個表的行數,執行上述語句時只需要讀出該變數即可,速度很快;
- InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖。一個更新語句會鎖住整張表,導致其他查詢和更新都會被阻塞,因此併發訪問受限。這也是 MySQL 將預設儲存引擎從 MyISAM 變成 InnoDB 的重要原因之一;
- InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的檔案存放在主鍵索引的葉子節點上,因此 InnoDB 必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然後再通過主鍵查詢到資料。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。而 MyISAM 是非聚集索引,資料檔案是分離的,索引儲存的是資料檔案的指標。主鍵索引和輔助索引是獨立的。
二、如何選擇儲存引擎
- 是否要支援事務,如果要請選擇 InnoDB,如果不需要可以考慮 MyISAM;
- 如果表中絕大多數都只是讀查詢,可以考慮 MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB。
- 系統奔潰後,MyISAM恢復起來更困難,能否接受,不能接受就選 InnoDB;
- MySQL5.5版本開始Innodb已經成為Mysql的預設引擎(之前是MyISAM),說明其優勢是有目共睹的。如果你不知道用什麼儲存引擎,那就用InnoDB,至少不會差。
三、InnoDB的索引原理
索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。
-
索引分為聚簇索引和非聚簇索引
非聚簇索引:複合索引、字首索引、唯一索引,又將其稱為輔助索引(secondary index),其資料結構為B+樹。
聚簇索引:在Mysql中是沒有語句來另外生成的,在Innodb中,Mysql中的資料是按照主鍵的順序來存放的。那麼聚簇索引就是按照每張表的主鍵來構造一顆B+樹,葉子節點存放的就是整張表的行資料。由於表裡的資料只能按照一顆B+樹排序,因此一張表只能有一個聚簇索引。在Innodb中,聚簇索引預設就是主鍵索引。
相關文章
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MyISAM InnoDB 區別
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- MySQL之儲存引擎InnoDB和MyISAM的區別及底層詳解MySql儲存引擎
- MySQL中myisam和innodb有什麼差異?MySql
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- MySQL 中 MyISAM 中的查詢為什麼比 InnoDB 快?MySql
- MySQL中MyISAM為什麼比InnoDB查詢快MySql
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MyISAM與InnoDB兩者的區別、詳細總結、效能對比
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- mysql中“ ‘ “和 “ ` “的區別MySql
- mysql中!=和is not的區別MySql
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- mysql 的myisam和innodb對應的cache管理方式的一點差異MySql
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL中datetime和timestamp的區別MySql
- 使用MyISAM表和InnoDB的一些記錄GD
- MySQL中CHAR和VARCHAR區別MySql
- MySQL中REPLACE INTO和INSERT INTO的區別分析MySql
- MySQL InnoDB中的事務隔離級別和鎖的關係MySql
- MySQL常見的兩種儲存引擎:MyISAM與InnoDB的愛恨情仇MySql儲存引擎
- Mysql中S 鎖和 X 鎖的區別MySql
- Oracle和MySQL的區別OracleMySql
- MYSQL和SQL的區別MySql
- MySQL和Oracle的區別MySqlOracle
- 【Mysql】MySQL中interactive_timeout和wait_timeout的區別MySqlAI
- Mysql中的鎖機制——MyISAM表鎖MySql
- MySQL優化篇系列文章(二)——MyISAM表鎖與InnoDB鎖問題MySql優化
- MySQL的索引為什麼用B+Tree?InnoDB的資料儲存檔案和MyISAM的有何不同?MySql索引
- MYSQL中 TYPE=MyISAM 錯誤的解決方法MySql
- 說說自己對於 MySQL 常見的兩種儲存引擎:MyISAM與 InnoDB的理解MySql儲存引擎
- mysql常用儲存引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介紹與如何選擇MySql儲存引擎Hive
- mysql myisam的鎖機制MySql
- mysql alter modify 和 change的區別MySql