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的區別,至少5點MySql
- Mysql引擎中MyISAM和InnoDB的區別有哪些?MySql
- InnoDB和MyISAM的區別
- MyISAM和InnoDB的區別
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- InnoDB和MyISAM 區別(轉)
- Mysql innodb引擎和myisam引擎使用索引區別MySql索引
- MyISAM InnoDB 區別
- InnoDB和MyISAM區別總結
- MySQL的MyISAM和InnoDB引擎的主要區別是什麼?MySql
- Innodb與MyISAM的區別
- MyISAM與InnoDB的區別
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MyISAM和InnoDB的主要區別和應用場景
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- MySQL之儲存引擎InnoDB和MyISAM的區別及底層詳解MySql儲存引擎
- MySQL中myisam和innodb有什麼差異?MySql
- MySQL 資料庫 InnoDB 和 MyISAM 資料引擎的差別MySql資料庫
- mysql的innodb和myisam的dml效能對比MySql
- MySQL: InnoDB 還是 MyISAM?MySql
- MySQL中MyISAM引擎與InnoDB引擎效能比較MySql
- MySQL 中 MyISAM 中的查詢為什麼比 InnoDB 快?MySql
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- MySQL中MyISAM為什麼比InnoDB查詢快MySql
- MYSQL INNODB主鍵使用varchar和int的區別MySql
- 【轉】Mysql兩種儲存引擎的異同【MyISAM和InnoDB】MySql儲存引擎
- mysql中!=和is not的區別MySql
- mysql中“ ‘ “和 “ ` “的區別MySql
- MySQL引擎介紹ISAM,MyISAM,HEAP,InnoDBMySql
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- MyISAM與InnoDB兩者的區別、詳細總結、效能對比
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQL儲存引擎之MyIsam和Innodb總結性梳理MySql儲存引擎
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- 【轉】InnoDB和MyISAM的技術資料
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- MySQL MyISAM引擎和InnoDB引擎對於單表大小限制的總結MySql