1. 程式人生 > >MySql兩種存儲引擎的區別

MySql兩種存儲引擎的區別

行級鎖 acid 文件 存儲引擎 但是 插入數據 區別 插入 b+樹

MyISAM:

  1. 不支持事務,但是每次查詢都是原子的;
  2. 支持表級鎖,即每次操作是對整個表加鎖;
  3. 存儲表的總行數;
  4. 一個MYISAM表有三個文件:索引文件、表結構文件、數據文件;
  5. 采用菲聚集索引,索引文件的數據域存儲指向數據文件的指針。輔索引與主索引基本一致,但是輔索引不用保證唯一性。

InnoDb:

  1. 支持ACID的事務,支持事務的四種隔離級別;
  2. 支持行級鎖及外鍵約束:因此可以支持寫並發;
  3. 不存儲總行數;
  4. 一個InnoDb引擎存儲在一個文件空間(共享表空間,表大小不受操作系統控制,一個表可能分布在多個文件裏),也有可能為多個(設置為獨立表空,表大小受操作系統文件大小限制,一般為2G),受操作系統文件大小的限制;
  5. 主鍵索引采用聚集索引(索引的數據域存儲數據文件本身),輔索引的數據域存儲主鍵的值;因此從輔索引查找數據,需要先通過輔索引找到主鍵值,再訪問輔索引;最好使用自增主鍵,防止插入數據時,為維持B+樹結構,文件的大調整。

MYISAM的主索引結構如下:

技術分享圖片

輔索引如下:

技術分享圖片

InnoDb的主索引如下:

技術分享圖片

輔索引如下:

技術分享圖片

兩種索引數據查找過程如下:

技術分享圖片

MySql兩種存儲引擎的區別