一、存儲結構
每個myisam的表在磁盤空間上有三個文件,表定義文件(.frm),數據文件(.MYD),索引文件(MYI)
Innodb:所有表都存儲在同一個數據文件(也可能是多個,或者獨立的表空間)
二、存儲空間
MYISAM:可被壓縮,存儲空間較小。
Innodb:需要更多的內存和存儲,會在主內存建立其專用的緩衝池用於高速緩衝數據和索引。
MYISAM的索引是和數據分開的,並且是可壓縮的,內存使用率對應的提高了不少,二Innodb是索引和數據緊密
捆綁的,沒有使用壓縮從而造成Innodb比MYISAM體積龐大不少
三、事務處理
MYISAM類型的表強調的是性能,其執行速度比Innodb要快得多,但是不支持外鍵,不提供事務支持。
Innodb提供事務支持事務,外鍵等高級數據庫功能。
四、CURD
如果執行大量的SELECT操作,MYISAM是更好的選擇
如果是UPDATE,INSERT出於性能考慮,Innodb是更好的選擇
DELETE操作時Innod不會重新建立表,而是一行一行的刪除。而MYISAM則是重新建立表。
五、AUTO_INCREMENT
MYISAM:可以和其它字段一起建立聯合索引。引擎自動增長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以通過前面幾列排序後遞增。
Innodb必須包含該只有該字段的索引。引擎自動遞增必須是索引,如果是組合索引也必須是組合索引第一列。
六、表的具體函數
MYISAM:保存表的總行數,如果select count(*) from table直接取出該值
Innodb:沒有保存表的總行數,如果select count(*) from table就會遍歷整個表,消耗會相當的大,但是在
加了where後MYISAM和Innodb處理方式都一樣
七、全文索引
MYISAM:支持全文索引(fuultext)。不支持中文
Innodb:不支持全文索引(fulltext)。但Innodb可以使用sphinx插件支持全文索引,並且效果更佳
八、表鎖差異
MYISAM:支持表鎖。
Innodb:支持事務和行鎖,是Innodb最大特色。行鎖大幅度提高了多用戶的併發操作性能,但是Innodb的
行鎖不是絕對的,行鎖只在where主鍵是有效的非主鍵where都會進行表鎖