Mysql資料庫儲存引擎
阿新 • • 發佈:2018-11-03
*.sql :mysql執行語句
一、如果Mysql是myisam引擎的,有全文索引
那麼一個表有如下三個檔案:
- *.frm:存放表結構的檔案
- *.myd:存放表資料data的檔案
- *.myi:存放表索引index的檔案
二、如果Mysql是Innodb引擎的,有事務能力
那麼一個表有如下兩個檔案:
- *.frm:存放表結構的檔案
- 表資料和索引放在一個檔案中:ibdata
三、儲存引擎分類
- MyISAM: 擁有較高的插入,查詢速度,但不支援事務
- InnoDB:5.5版本後Mysql的預設資料庫,事務型資料庫的首選引擎,支援ACID事務,支援行級鎖定
- BDB: 源自Berkeley DB,事務型資料庫的另一種選擇,支援COMMIT和ROLLBACK等其他事務特性
- Memory :所有資料置於記憶體的儲存引擎,擁有極高的插入,更新和查詢效率。但是會佔用和資料量成正比的記憶體空間。並且其內容會在Mysql重新啟動時丟失
- Merge :將一定數量的MyISAM表聯合而成一個整體,在超大規模資料儲存時很有用
- Archive :非常適合儲存大量的獨立的,作為歷史記錄的資料。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支援相對較差
- Federated: 將不同的Mysql伺服器聯合起來,邏輯上組成一個完整的資料庫。非常適合
- Cluster/NDB :高冗餘的儲存引擎,用多臺資料機器聯合提供服務以提高整體效能和安全性。適合資料量大,安全和效能要求高的應用
- CSV: 邏輯上由逗號分割資料的儲存引擎。它會在資料庫子目錄裡為每個資料表建立一個.CSV檔案。這是一種普通文字檔案,每個資料行佔用一個文字行。CSV儲存引擎不支援索引。
- BlackHole :黑洞引擎,寫入的任何資料都會消失,一般用於記錄binlog做複製的中繼
另外,Mysql的儲存引擎介面定義良好。有興趣的開發者通過閱讀文件編寫自己的儲存引擎。
四:儲存引擎的選擇
不管哪種儲存引擎,你要快速查詢到資料,都需先建立好索引
大資料量+高併發量的業務場景,全文索引,MyISAM也不是最優之選
不管哪種儲存引擎,在資料量大併發量大的情況下,都不應該使用外來鍵,而建議由應用程式保證完整性
MyISAM只支援表鎖,InnoDB可以支援行鎖,但需要特別注意的是,沒有索引的行鎖是行鎖,有索引的行鎖是表鎖
個人認為:絕大部分業務是混合讀寫,只要資料量和併發量較大,一律使用InnoDB。
總結
在大資料量,高併發量的網際網路業務場景下,對於MyISAM和InnoDB
- 有where條件,count(*)兩個儲存引擎效能差不多
- 不要使用全文索引,應當使用《索引外接》的設計方案
- 事務影響效能,強一致性要求才使用事務
- 不用外來鍵,由應用程式來保證完整性
- 不命中索引,InnoDB也不能用行鎖
在大資料量,高併發量的網際網路業務場景下,請使用InnoDB:
- 行鎖,對提高併發幫助很大
- 事務,對資料一致性幫助很大