這是高級開發者面試時經常被問的問題,實際我們在平時的開發中,經常會遇到的,在用SQLyog等工具創建表時,就有一個引擎項要你去選,如下圖:
Mysql的存盤引擎有這么多種,實際我們在平時用的最多的莫過于InnoDB和MyISAM了,
所有如果面試官問道mysql有哪些存盤引擎,你只需要告訴這兩個常用的就行,
那他們都有什么特點和區別呢?
MyISAM和InnoDB的特點:
MyISAM :默認表型別,它是基于傳統的ISAM型別,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存盤記錄和檔案的標準方法,不是事務安全的,而且不支持外鍵,如果執行大量的select,insert MyISAM比較適合,
InnoDB :支持事務安全的引擎,支持外鍵、行鎖、事務是他的最大特點,如果有大量的update和insert,建議使用InnoDB,特別是針對多個并發和QPS較高的情況,注: 在MySQL 5.5之前的版本中,默認的搜索引擎是MyISAM,從MySQL 5.5之后的版本中,默認的搜索引擎變更為InnoDB,
MyISAM和InnoDB的區別:
- InnoDB支持事務,MyISAM不支持,對于InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;
- InnoDB支持外鍵,而MyISAM不支持,
- InnoDB是聚集索引,使用B+Tree作為索引結構,資料檔案是和(主鍵)索引綁在一起的(表資料檔案本身就是按B+Tree組織的一個索引結構),必須要有主鍵,通過主鍵索引效率很高,MyISAM是非聚集索引,也是使用B+Tree作為索引結構,索引和資料檔案是分離的,索引保存的是資料檔案的指標,主鍵索引和輔助索引是獨立的,
- InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描,而MyISAM用一個變數保存了整個表的行數,執行上述陳述句時只需要讀出該變數即可,速度很快,
- Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;5.7以后的InnoDB支持全文索引了,
- InnoDB支持表、行級鎖(默認),而MyISAM支持表級鎖,
- InnoDB表必須有主鍵(用戶沒有指定的話會自己找或生產一個主鍵),而Myisam可以沒有,
- Innodb存盤檔案有frm、ibd,而Myisam是frm、MYD、MYI,
Innodb:frm是表定義檔案,ibd是資料檔案,
Myisam:frm是表定義檔案,myd是資料檔案,myi是索引檔案,
最后:
本次分享就到這里,相信通過上面的文章,你已經對InnoDB和MyISAM有一個基本的認識了,但是你僅僅知道這一些是不夠的,在接下來的一段時間里,我會繼續在我的公眾號:Java技術zhai 總結一些面試中的問題共享給大家,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/80284.html
標籤:MySQL
上一篇:MySQL 什么是索引?
