mysql的InnoDB和MyISAM引擎區別

InnoDB

特點:

  1. 行級鎖
  2. 支持事務處理
  3. 支持外鍵,
  4. 使用B+樹。
  5. 聚集索引主鍵
  6. mysql5.6版本開始支持已全文索引

InnoDB中數據文件本身就是索引文件。索引也使用B+樹實現,葉子節點儲存數據。索引文件本身需要按主鍵構建(所以InnoDB需要必須有主鍵,沒有指定會默認生成)。InnoDB的輔助索引底層儲存的是主鍵的值。然後再根據主鍵的值去主鍵索引(也相當於數據文件)去查找相應的值。
InnoDB這樣的聚集式索引會使得主鍵的檢索十分高效。若使用輔助索引,需查詢2遍索引。

最好不要使用過長的主鍵,因爲輔助索引會引用主鍵值。主鍵最好是自增的,防止爲維護B+樹而頻繁分裂調整樹結構。

MyISAM

  1. 不支持事務
  2. 不支持外鍵
  3. 不支持行鎖

MyISAM的索引使用B+樹實現,葉子節點記錄數據的儲存地址。主索引和輔助索引結構相同,區別在於主索引是唯一的,而輔助索引可以重複。查詢過程爲:先查詢B+樹查詢索引,得到數據地址,再根據地址讀取數據。這種索引方式稱爲非聚集索引

MyISAM要點: 索引文件上不記錄數據,只有數據儲存地址。MyISAM的索引文件和數據文件分離,查詢上先查索引文件,再查數據文件。稱爲非聚集索引。

數據結構

數據結構

B樹,又稱多路平衡查找樹。所有節點中孩子節點的最大值爲此樹的階(用m表示)。每個節點關鍵字的個數最少有[m/2-1]個,最多有[m-1]個。也即一個m爲4的B樹,子樹節點最多有4個,每個節點關鍵字(數據)的至多有3個,至少有1個。

B樹的數據都在非葉子節點。(所有葉子節點都在同一層次,且不帶信息)

B+樹,所有數據都在葉子節點。葉子節點有順序訪問指針。可以更好利用計算機的局部緩存原理(當一個數據被用到時,它後面的數據也會馬上被用到)。

在實際應用中,度一般是挺大的,一般在100左右。h一般不大,不超過3。

而紅黑樹的深度一般是很大的,磁盤IO的次數會多。無法利用局部性原理。

而對比B樹和B+樹來說,B+樹由於把數據都放到了葉子節點,每次IO可以獲取更多節點,以及葉子節點的順序訪問指針,所以B+樹比B樹擁有更好新能。

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