mysql支持不少表類型的表(即存儲引擎),如myisam、innodb、memory、archive、example等。每種存儲引擎都有本身的優勢和缺點,充分的理解每種存儲引擎,有助於合理的使用它們。有人認爲在同一個數據庫中使用多種存儲引擎很影響性能,其實這是一種十分錯誤的想法。實際上,除非是很是簡單的數據庫,不然的話,只使用一種存儲引擎,對應用程序的性能來講是一個十分糟糕的行爲。對數據庫瞭解的人會根據每張表的做用不一樣來選擇適當的存儲引擎,這纔是正確的作法。mysql
前面說過mysql的存儲引擎不少,可是我我的在工做中運用最多的存儲引擎有兩個,一個是InnoDB,一個是MyISAM。我這裏就聊聊這兩個存儲引擎,並比較下二者之間的區別。linux
1、MyISAMsql
MyISAM如今爲mysql的默認存儲引擎,若是在建表的時候,沒有指定表類型,mysql就會默認使用MyISAM。MyISAM有一個不少人認爲很重要,然而我卻以爲沒什麼卵用的特性,那就是MyISAM表示獨立於操做系統以外的。通俗點說就是你能夠很輕鬆的將MyISAM表從windows移植到linux或者從linux移植到windows。這確實是個優勢,但是哪一個技術主管會有在決定用了一種操做系統一段時間後又要換服務器的操做系統的腦殘行爲,全部我認爲這個優勢沒有什麼實際的意義。數據庫
MyISAM存儲引擎是mysql組件中很是重要的一部分,在mysql中能夠建立3種MyISAM格式的表——靜態、動態和壓縮。格式不須要單獨指定,mysql會根據表結構自動選擇最合適的格式。windows
一、MyISAM靜態服務器
若是表的每一個字段的數據類型的定義都是使用靜態的(如char),mysql就會自動使用靜態MyISAM格式,這種類型格式的表的性能是很高的,也就是查詢更新用的時間不多,但要知道這是在犧牲空間爲代價。由於每一列都要分配最大的空間,即便有部分空間沒有用到,這就使得靜態的表所佔的空間會比較大。併發
二、MyISAM動態性能
若是表的每一個字段的數據類型的定義都是使用動態的(如varchar),mysql就會自動使用動態MyISAM格式,這種類型格式的表的性能會有所降低,可是它的空間佔有要比靜態的少不少。spa
三、MyISAM壓縮操作系統
若是有一張表在設計之初只賦予了它讀的使命,就能夠用MyISAM壓縮表,在相同的配置下,它的性能是最快的。
2、InnoDB
InnoDB是一個事務型存儲引擎,它默認支持事務。所以,在對數據完整度有較高要求的項目中,都是採用InnoDB做爲存儲引擎,好比跟銀行相關的項目。InnoDB還引入行級鎖定。其餘表類型都是全表鎖定,意思就是說,在一個用戶要修改一張表中,本身那一行的某個信息的時候,數據庫會先鎖定整張表,其餘用戶對這張表沒法進行操做,這就是全表鎖定。行級鎖定就不同了,只鎖定本身要修改的那一行的,也就是說其餘人對錶還能夠進行操做,只是不能操做被鎖定的那一行的數據了。好處顯而易見,在速度上更快了,特別適合處理多重併發的更新請求。
InnoDB還引入了外鍵約束。