mysql預設採用的是myisam,5.5版本以後預設採用的是innodb。
每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。
.frm檔案儲存表定義。
資料檔案的擴充套件名為.myd (mydata)。
索引檔案的副檔名是.myi (myindex)。
基於磁碟的資源是innodb表空間資料檔案和它的日誌檔案,innodb 表的大小只受限於作業系統檔案的大小,一般為 2gb
myisam型別的表強調的是效能,其執行數度比innodb型別更快,但是不提供事務支援
innodb提供事務支援事務,外部鍵等高階資料庫功能
如果執行大量的select,myisam是更好的選擇
select count(*) from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的
innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行
表鎖
myisam的好處如下:
1、平台上承載的大部分專案是讀多寫少的專案,而myisam的讀效能是比innodb強不少的。
2、myisam的索引和資料是分開的,並且索引是有壓縮的,記憶體使用率就對應提高了不少。能載入更多索引,而innodb是索引和資料是緊密**的,沒有使用壓縮從而會造成innodb比myisam體積龐大不小。
3、經常隔1,2個月就會發生應用開發人員不小心update乙個表where寫的範圍不對,導致這個表沒法正常用了,這個時候myisam的優越性就體現出來了,隨便從當天拷貝的壓縮包取出對應表的檔案,隨便放到乙個資料庫目錄下,然後dump成sql再導回到主庫,並把對應的binlog補上。如果是innodb,恐怕不可能有這麼快速度,別和我說讓innodb定期用匯出***.sql機制備份,因為最小的乙個資料庫例項的資料量基本都是幾十g大小。
4、從接觸的應用邏輯來說,select count(*) 和order by 是最頻繁的,大概能佔了整個sql總語句的60%以上的操作,而這種操作innodb其實也是會鎖表的,很多人以為innodb是行級鎖,那個只是where對它主鍵是有效,非主鍵的都會鎖全表的。
5、還有就是經常有很多應用部門需要我給他們定期某些表的資料,myisam的話很方便,只要發給他們對應那錶的frm.myd,myi的檔案,讓他們自己在對應版本的資料庫啟動就行,而innodb就需要匯出***.sql了,因為光給別人檔案,受字典資料檔案的影響,對方是無法使用的。
6、如果和myisam比insert寫操作的話,innodb還達不到myisam的寫效能,如果是針對基於索引的update操作,雖然myisam可能會遜色innodb,但是那麼高併發的寫,從庫能否追的上也是乙個問題,還不如通過多例項分庫分表架構來解決。
7、如果是用myisam的話,merge引擎可以大大加快應用部門的開發速度,他們只要對這個merge表做一些select count(*)操作,非常適合大專案總量約幾億的rows某一型別(如日誌,調查統計)的業務表。
當然innodb也不是絕對不用,用事務的專案就用innodb的。另外,可能有人會說你myisam無法抗太多寫操作,但是可以通過架構來彌補。
Mysql 儲存引擎之 MyISAM儲存引擎
myisam是預設儲存引擎。每個myisam在磁碟上儲存成三個檔案。frm檔案儲存表定義 myd檔案儲存資料 myi檔案儲存索引。要明確表示你想要用乙個myisam 請用engine表選項指出來 create table test myisam id int engine myisam 2 如下是m...
MyISAM儲存引擎
myisam是預設儲存引擎。它基於更老的isam 但有很多有用的擴充套件。注意mysql 5.1不支援isam 每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。frm檔案儲存表定義。資料檔案的擴充套件名為.myd mydata 索引檔案的副檔名是.myi ...
MyISAM儲存引擎
支援事務,支援外來鍵,尤其是訪問速度快,對事務完 整性沒有要求或者以select insert為主的應用基本都可以使用這個引擎來建立表。每個myisam在磁碟上儲存成3個檔案,其中檔名和表名都相同,但是副檔名分別為 1 frm 儲存表定義 2 myd mydata,儲存資料 3 myi myinde...