MySQL儲存引擎 MyISAM與InnoDB

2021-09-02 16:59:00 字數 1585 閱讀 9436

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...