標籤:儲存引擎
目錄
1、寫在前面
2、mysql內建其他儲存引擎
3、第三方儲存引擎
4、儲存引擎的選擇標準
1、寫在前面
mysql> SHOW ENGINES; #查看支援的儲存引擎
儲存引擎是表層級的概念,在建立表時就可指定表的儲存引擎。
mysql> SHOW TABLE STATUS LIKE ‘tn_name‘\G #顯示表狀態資訊
表狀態資訊:
Row_format:Dynamic,Fixed,Compressed,Compact
Rows:表中的行行數,採用InnoDB引擎的表是估算值
Avg_row_length:行的平均位元組數
Data_length:表的資料量,單位為位元組
Max_data_length:表的容量上限,單位為位元組
Index_length:索引資料量,單位為位元組
Data_free:已指派出去,但未儲存資料的儲存空間,通常指開始被資料填充,後被刪除後騰出的空間
Auto_increment:具有自動屬性的欄位的下一個增長值
Create_time:表的建立時間
Update_time:資料最近一次的更新時間
Check_time:使用check命令檢查表的時間
Collation:定序
Checksum:表的校正和
Create_options:建立表時指定的其他選項
Coment:對MyISAM表,儲存的是建立表時的comment表選項指定的資訊,對InnoDB表來講,儲存對應的資料表空間資訊
2、mysql內建儲存引擎
2.1、InnoDB引擎
InoDB特性:
InnoDB引擎是事務型的儲存引擎,InnoDB表採用聚簇索引建立,資料與索引儲存在一起,按主索引順序儲存為有序檔案,通過間隙鎖有效防止幻讀,支援自適應HASH索引加速讀操作,採用MVCC多版本並發控制來支援高並發,實現了四個標準的交易隔離等級,不像MyISAM引擎只支援表級鎖,InnoDB表支援行級鎖,利用MySQL Enterprise Backup和開源的Percona Xtrabackup工具實現真正的熱備份。
採用InnoDB儲存引擎的表在檔案層級儲存的檔案:
tb_name.frm:儲存表格式
tb_name.ibd:在開啟“innodb_file_per_table=ON”後,資料與索引就儲存在以此檔案中,預設檔案的位置儲存在frm表格儲存體位置的位置,如果沒有開啟此變數,那所有的表資料及索引預設都儲存在資料目錄的“ibdata1”這樣的資料表空間檔案中,這是由InnoDB管理的一個黑盒子,由一系列的資料檔案組成。
2.2、MyISAM引擎
MyISAM支援全文索引、壓縮、空間函數、但不支援行級鎖和事務,具有麼延遲更新索引鍵特性,即當指定“DELAY_KEY_WRITE”選項後,每次修改執行完成時,不會立刻將修改的索引資料寫入到磁碟,而是先寫入記憶體中的鍵緩衝區,只有在清理鍵緩衝區或者關閉表的時候才會將對應的索引塊寫入到磁碟,可提升寫入效能,但在主機崩潰時會造成索引損壞。
缺點:崩潰後不能安全恢複
MyISAM適用情境:資料量較小的表,能夠接受手動修複操作
採用MyISAM儲存引擎的表在檔案層級儲存的檔案:
tb_name.frm:格式檔案
tb_name.MYD:資料檔案
tb_name.MYI:索引檔案
2.3、ARCHIVE引擎
僅支援INSERT和SELECT,支援很好的壓縮功能,支援全表掃描,不支援索引
適用情境:儲存日誌資訊,或按時間序列實現的資料擷取運用
2.4、CSV引擎
將資料儲存為CSV格式,不支援索引
適用於在不同類型的資料庫中交換資料的情境
2.5、BLACKHOLE:
沒有儲存機制,任何資料都會被丟棄,但是會記錄二進位日誌
適用於在mysql複製情境作為轉送伺服器的儲存引擎
2.6、Federated引擎
能夠訪問遠程伺服器上的資料,類似於代理。在MariaDB中被改進
2.7、Memory引擎:
記憶體儲存引擎,能實現資料的快速查詢、修改,支援Hash索引,比MyISAM至少快一個數量級,但也只是支援表級鎖,並發寫入效能低。適用於需要快速檢索資料,通常用於實現暫存資料表。
2.8、MRG引擎
能夠把多個MyISAM表合并,本身並不儲存資料,但在引入資料分割函數後,此引擎已被放棄。
2.9、NDB叢集引擎
專用於MySQL Cluster叢集的儲存引擎
3、第三方儲存引擎
3.1、OLTP類(On-Line Transaction Processing聯機交易處理系統(OLTP)也稱為面向交易的處理系統)
XtraDB:InnoDB增強版,對InnoDB引擎做了改進,主要集中在性、可測量性和操作靈活性方面,已經在MariaDB中整合此引擎。
PBXT:社區已不活躍,已不再維護,PBXT 在 MariaDB 的 5.1/5.2/5.3 版本中存在,但從MariaDB 5.5 開始就不再提供 PBXT 儲存引擎
TokuDB:是一種大資料存放區引擎,儲存海量資料有優勢,支援分形樹索引資料結構,適用於需要大量插入分析型資料的情境
3.2、列式儲存引擎(在海量儲存時效率會更高)
Infobright:適合資料量在數十TB的情境,不支援壓縮
還有InfiniDB、MonetDB、LucidDB這樣的列區引擎。
3.3、社區儲存引擎
社區儲存引擎大多沒有或很少在生產環境中使用,這裡只是列舉一些:
SphinxSE、Aria
Groona:全文索引引擎
QQGraph:支援圖,由Open query研發
Spider:支援分區(shard)
VPForMySQL:支援垂直資料分割
4、儲存引擎的選擇標準
除非需要用到某些InnoDB不具備條件的特性,並且沒有其他辦法可以替代,否則都應該優先選擇InnoDB引擎。
a)、是否需要事務支援
b)、是否可熱備份
c)、崩潰恢複的資料安全
建議:
儲存日誌型資料,選擇MyISAM和ARCHIVE
儲存論壇應用,選擇InnoDB
訂單處理,選擇InnoDB
本文出自 “知識需要總結與記錄” 部落格,請務必保留此出處http://zhaochj.blog.51cto.com/368705/1631323
MySQL儲存引擎