1. MYISAM和INNODB的不一樣?
答:主要有如下幾點區別:
a)構造上的區別
MyISAM在磁盤上存儲成三個文件,其中.frm文件存儲表定義;.MYD (MYData)爲數據文件;.MYI (MYIndex)爲索引文件。
而innodb是由.frm文件、表空間(分爲獨立表空間或者共享表空間)和日誌文件(redo log)組成。
b)事務上的區別
myisam不支持事務;而innodb支持事務。
c)鎖上的區別
myisam使用的是表鎖;而innodb使用的行鎖(固然innodb也支持表鎖)。
表級鎖:直接鎖定整張表,在鎖按期間,其餘進程沒法對該表進行寫操做,若是設置的是寫鎖,那麼其餘進程讀也不容許,所以myisam支持的併發量低,但myisam不會出現死鎖;
行級鎖:只對指定的行進行鎖定,其餘進程仍是能夠對錶中的其餘行進行操做的。所以行鎖能大大的減小數據庫操做的衝突,但有時會致使死鎖。
d)是否支持外鍵的區別
myisam不支持外鍵,innodb支持外鍵
e) select count(*)的區別
對於沒有where的count(*)使用MyISAM要比InnoDB快得多。由於MyISAM內置了一個計數器,count(*)時它直接從計數器中讀,而InnoDB必須掃描全表。
f)myisam只把索引都load到內存中,而innodb存儲引擎是把數據和索引都load到內存中 ,innob不支持全文索引
當須要使用數據庫事務時,該引擎固然是首選。因爲鎖的粒度更小,寫操做不會鎖定全表,因此在併發較高時,使用Innodb引擎會提高效率。
yIASM是MySQL默認的引擎,可是它沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,所以當INSERT(插入)或UPDATE(更新)數據時即寫操做須要鎖定整個表,效率便會低一些。
MyIASM引擎是爲了查和增長,效率高。全部功能都圍繞這這個
Innodb引擎功能更強(事務等)效率低一些。