MyISAM:
- 不支持事務,但是每次查詢都是原子的;
- 支持表級鎖,即每次操作是對整個表加鎖;
- 存儲表的總行數;
- 一個MYISAM表有三個文件:索引文件、表結構文件、數據文件;
- 采用菲聚集索引,索引文件的數據域存儲指向數據文件的指針。輔索引與主索引基本一致,但是輔索引不用保證唯一性。
InnoDb:
- 支持ACID的事務,支持事務的四種隔離級別;
- 支持行級鎖及外鍵約束:因此可以支持寫並發;
- 不存儲總行數;
- 一個InnoDb引擎存儲在一個文件空間(共享表空間,表大小不受操作系統控制,一個表可能分布在多個文件里),也有可能為多個(設置為獨立表空,表大小受操作系統文件大小限制,一般為2G),受操作系統文件大小的限制;
- 主鍵索引采用聚集索引(索引的數據域存儲數據文件本身),輔索引的數據域存儲主鍵的值;因此從輔索引查找數據,需要先通過輔索引找到主鍵值,再訪問輔索引;最好使用自增主鍵,防止插入數據時,為維持B+樹結構,文件的大調整。
MYISAM的主索引結構如下:
輔索引如下:
InnoDb的主索引如下:
輔索引如下:
兩種索引數據查找過程如下: