先看圖:
mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE
MYISAM: 全表鎖,擁有較高的執行速度,不支持事務,不支持外鍵,并發性能差,占用空間相對較小,對事務完整性沒有要求,以select、insert為主的應用基本上可以使用這引擎
Innodb: 行級鎖,提供了具有提交、回滾和崩潰回復能力的事務安全,支持自動增長列,支持外鍵約束,并發能力強,占用空間是MYISAM的2.5倍,處理效率相對會差一些
Memory: 全表鎖,存儲在內容中,速度快,但會占用和數據量成正比的內存空間且數據在mysql重啟時會丟失,默認使用HASH索引,檢索效率非常高,但不適用于精確查找,主要用于那些內容變化不頻繁的代碼表
MERGE: 是一組MYISAM表的組合
常用的兩個引擎為:InnoDB 與 MyISAM,它們的區別如下:
1: InnoDB支持事務,MyISAM不支持,對于InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;
2: InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;
3: InnoDB是聚集索引,數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。而MyISAM是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。
4: InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;
5: Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;