1. 程式人生 > >Mysql資料庫儲存引擎

Mysql資料庫儲存引擎

*.sql :mysql執行語句

一、如果Mysql是myisam引擎的,有全文索引

那麼一個表有如下三個檔案:

  1. *.frm:存放表結構的檔案
  2. *.myd:存放表資料data的檔案
  3. *.myi:存放表索引index的檔案

二、如果Mysql是Innodb引擎的,有事務能力

那麼一個表有如下兩個檔案:

  1. *.frm:存放表結構的檔案
  2. 表資料和索引放在一個檔案中:ibdata

三、儲存引擎分類

  1. MyISAM: 擁有較高的插入,查詢速度,但不支援事務
  2. InnoDB:5.5版本後Mysql的預設資料庫,事務型資料庫的首選引擎,支援ACID事務,支援行級鎖定
  3. BDB: 源自Berkeley DB,事務型資料庫的另一種選擇,支援COMMIT和ROLLBACK等其他事務特性
  4. Memory :所有資料置於記憶體的儲存引擎,擁有極高的插入,更新和查詢效率。但是會佔用和資料量成正比的記憶體空間。並且其內容會在Mysql重新啟動時丟失
  5. Merge :將一定數量的MyISAM表聯合而成一個整體,在超大規模資料儲存時很有用
  6. Archive :非常適合儲存大量的獨立的,作為歷史記錄的資料。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支援相對較差
  7. Federated: 將不同的Mysql伺服器聯合起來,邏輯上組成一個完整的資料庫。非常適合
    分散式應用
  8. Cluster/NDB :高冗餘的儲存引擎,用多臺資料機器聯合提供服務以提高整體效能和安全性。適合資料量大,安全和效能要求高的應用
  9. CSV: 邏輯上由逗號分割資料的儲存引擎。它會在資料庫子目錄裡為每個資料表建立一個.CSV檔案。這是一種普通文字檔案,每個資料行佔用一個文字行。CSV儲存引擎不支援索引。
  10. BlackHole :黑洞引擎,寫入的任何資料都會消失,一般用於記錄binlog做複製的中繼

另外,Mysql的儲存引擎介面定義良好。有興趣的開發者通過閱讀文件編寫自己的儲存引擎。

四:儲存引擎的選擇

不管哪種儲存引擎,你要快速查詢到資料,都需先建立好索引

大資料量+高併發量的業務場景,全文索引,MyISAM也不是最優之選

不管哪種儲存引擎,在資料量大併發量大的情況下,都不應該使用外來鍵,而建議由應用程式保證完整性

MyISAM只支援表鎖,InnoDB可以支援行鎖,但需要特別注意的是,沒有索引的行鎖是行鎖,有索引的行鎖是表鎖

個人認為:絕大部分業務是混合讀寫,只要資料量和併發量較大,一律使用InnoDB。

總結

大資料量,高併發量的網際網路業務場景下,對於MyISAM和InnoDB

  • 有where條件,count(*)兩個儲存引擎效能差不多
  • 不要使用全文索引,應當使用《索引外接》的設計方案
  • 事務影響效能,強一致性要求才使用事務
  • 不用外來鍵,由應用程式來保證完整性
  • 不命中索引,InnoDB也不能用行鎖

結論

大資料量,高併發量的網際網路業務場景下,請使用InnoDB:

  • 行鎖,對提高併發幫助很大
  • 事務,對資料一致性幫助很大