面試官:你用過mysql哪些存儲引擎,請分別展開介紹一下

 

 

這是高級開發者面試時常常被問的問題。實際咱們在平時的開發中,常常會遇到的,在用SQLyog等工具建立表時,就有一個引擎項要你去選。以下圖:mysql

Mysql的存儲引擎有這麼多種,實際咱們在平時用的最多的莫過於InnoDB和MyISAM了。面試

全部若是面試官問道mysql有哪些存儲引擎,你只須要告訴這兩個經常使用的就行。sql

那他們都有什麼特色和區別呢?

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的區別:

  1. InnoDB支持事務,MyISAM不支持。對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,因此最好把多條SQL語言放在begin和commit之間,組成一個事務;
  2. InnoDB支持外鍵,而MyISAM不支持。
  3. InnoDB是彙集索引,使用B+Tree做爲索引結構,數據文件是和(主鍵)索引綁在一塊兒的(表數據文件自己就是按B+Tree組織的一個索引結構),必需要有主鍵,經過主鍵索引效率很高。MyISAM是非彙集索引,也是使用B+Tree做爲索引結構,索引和數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。
  4. InnoDB不保存表的具體行數,執行select count(*) from table時須要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只須要讀出該變量便可,速度很快。
  5. Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;5.7之後的InnoDB支持全文索引了。
  6. InnoDB支持表、行級鎖(默認),而MyISAM支持表級鎖。
  7. InnoDB表必須有主鍵(用戶沒有指定的話會本身找或生產一個主鍵),而Myisam能夠沒有。
  8. Innodb存儲文件有frm、ibd,而Myisam是frm、MYD、MYI。

Innodb:frm是表定義文件,ibd是數據文件。工具

Myisam:frm是表定義文件,myd是數據文件,myi是索引文件。搜索引擎

最後:

本次分享就到這裏,相信經過上面的文章,你已經對InnoDB和MyISAM有一個基本的認識了,可是你僅僅知道這一些是不夠的,在接下來的一段時間裏,我會繼續在個人公衆號:Java技術zhai 總結一些面試中的問題共享給你們。指針

相關文章
相關標籤/搜索