MySQL 數據庫引擎Innodb、myisam主要區別

mysql支持存儲引擎有好幾種,咱們這裏主要討論一下常用的幾種存儲引擎。Innodb,myisam。

一、區別

  1. InnoDB支持事務,MyISAM不支持,對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;
  2. InnoDB是聚集索引,數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然後再通過主鍵查詢到數據。因此,主鍵不應該過大,因爲主鍵太大,其他索引也都會很大。而MyISAM是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。
  3. InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;
  4. Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;

二、如何選擇

  1. 是否要支持事務,如果要請選擇innodb,如果不需要可以考慮MyISAM;
  2. 如果表中絕大多數都只是讀查詢,可以考慮MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB。
  3. 系統奔潰後,MyISAM恢復起來更困難,能否接受;
  4. MySQL5.5版本開始Innodb已經成爲Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的,如果你不知道用什麼,那就用InnoDB,至少不會差。

     

MyISAM:MyISAM索引文件和數據文件是分離的

  • MyISAM主鍵索引: B+Tree葉子節點存儲的是 數據行的文件地址/文件指針

  • MyISAM普通索引:另外的一個B+Tree葉子節點存儲的是 數據行的文件地址/文件指針

InnoDB:InnoDB索引文件和數據文件是合在一起的

  •  InnoDB主鍵索引: B+Tree葉子節點存儲的是 索引+數據(聚集索引)

  •  InnoDB非主鍵索引 : B+Tree葉子節點存儲的是 主鍵

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章