MySQL的強大之處在于它的插件式存儲引擎,我們可以基于表的特點使用不同的存儲引擎,從而達到最好的性能。 下面我們來認識一下MySQL各表存儲引擎的特點: InnoDB存儲引擎 特點: 1,支持事務,主要面向在線事務處理(OLTP)方面的應用。 2,行鎖設計,支持外鍵
MySQL的強大之處在于它的插件式存儲引擎,我們可以基于表的特點使用不同的存儲引擎,從而達到最好的性能。
下面我們來認識一下MySQL各表存儲引擎的特點:
InnoDB存儲引擎
特點:
1,支持事務,主要面向在線事務處理(OLTP)方面的應用。
2,行鎖設計,支持外鍵,并支持orcle的非鎖定讀,即默認情況下讀取操作不加鎖。
3,第三方存儲引擎,被orcle收購。
4,windows版本默認存儲引擎,其他系統mysql默認存儲引擎為MyISAM。
設計理念:
1,InnoDB默認將數據放到一個邏輯的表空間中,這個表空間就像黑盒子一樣由InnoDB自身進行管理。從mysql4.1開始,它可以將每個 InnoDB存儲引擎的表單獨存放到一個獨立的ibd文件中。與orcle類似,InnoDB存儲引擎同樣可以使用裸設備(row disk)來建立其表空間。
2,InnoDB通過使用多版本并發控制(MVCC)來獲取高并發性,并且實現了sql標準的4種隔離級別,默認為REPEATABLE級別。同時使用一種next-key-locking的策略來避免幻讀(phantom)。除此之外,InnoDB存儲引擎還提供插入緩存(insert buffer),二次寫(double write),自適應哈希索引(adaptive hash index),預讀(read ahead)等高性能和高可用的功能。
MyISAM存儲引擎
特點:
1,不支持事務,表鎖(表級鎖,加鎖會鎖住整個表),支持全文索引,對于一些OLAP(online analytical processing,在線分析處理)操作速度快
2,官方存儲引擎,除windows版本外,是所有mysql版本的默認存儲引擎。
設計理念:
1,myisam存儲引擎表由myd和myi組成。myd用來存放數據文件,myi用來存放索引文件,可以通過myisampack工具進一步壓縮數據文件,因為該工具使用huffman編碼靜態算法來壓縮數據。因此,使用該工具壓縮后的表是只讀的,當然也可以通過myisampack來解壓數據文件。
2,mysql5.0之前,myisam默認支持的表大小為4g,如果需要支持大于4g的myisam表時,則需要制定Max_Rows和AVG_ROW_LENGTH屬性。從mysql5.0版本開始,myisam默認支持256T的單表數據,足夠滿足一般應用的需求。
3,對于myisam存儲引擎表,mysql數據庫只緩存其索引文件,數據文件的緩存由操作系統本身來完成。這與其他使用LRU算法緩存數據的大部分數據庫大不相同。此外,在mysql5.1.23版本之前,無論是在32b或64b的操作系統環境中,緩存索引的緩存區最大只能設置為4g,在之后的版本中,64位系統可以支持大于4g的索引緩存區。
NDB存儲引擎
NDB存儲引擎是一個集群存儲引擎,類似于orcle的rac集群,不過與rac share everything結構不同的是,其結構是share nothing的集群結構,因此能提供更高級別的高可用性。
特點:
1,數據全部放在內存中,從5.1版本開始,可以將非索引數據放在磁盤上,因此主鍵查找的速度極快,并且通過添加ndb數據存儲引擎節點(Data Node)可以線性地提高數據庫性能,是高可用,高性能的集群系統。
2,ndb存儲引擎的連接操作(join)是在mysql數據庫層完成的,而不是在存儲引擎層完成的,這意味著復雜的連接操作需要巨大的網絡開銷,因此,查詢速度很慢,這是ndb的瓶頸。
Memory存儲引擎
memory存儲引擎(之前稱為heap存儲引擎)將表中的數據存放在內存中,如果數據庫重啟或發生崩潰,表中的數據都會消失。它非常適合用于存放臨時數據的臨時表,以及數據倉庫的緯度表,默認使用哈希索引,而不是b+樹索引。
使用限制:memory存儲引擎只支持表鎖,并發性能較差,并且不支持text和blob列類型。最重要的是,存放變長字段(varchar)時,按照定常字段的方式進行存放,造成內存浪費。此外,mysql數據庫使用臨時表存放查詢的中間結果集(intermediate result)。如果中間結果集大于memory存儲引擎表的容量設置,或中間結果集含有text或blob字段,則mysql數據庫會把其轉換到 myisam存儲引擎表而存放到磁盤。由于myisam不緩存數據文件,因此這時產生的臨時表的性能對于查詢會有損失。
Archive存儲引擎
特點:
1,archive存儲引擎只支持insert和select操作,mysql5.1開始支持索引。使用zlib算法將數據行進行壓縮后存儲,壓縮比率一般可達1:10
2,archive存儲引擎非常適用于存儲歸檔數據,如日志信息。
3,archive存儲引擎使用行鎖來實現高并發的插入操作。由于本身不是事務安全的存儲引擎,其設計目標主要是提供高速的插入和壓縮功能。
Maria存儲引擎
maria存儲引擎是新開發的引擎,設計目標主要是用來取代原有的myisam存儲引擎,從而成為mysql的默認存儲引擎。
特點:
1,緩存數據和索引文件,行鎖設計,提供mvcc功能,支持事務和非事務安全的選項支持,及更好的blob字段類型的處理性能。
查看當前使用的mysql數據庫所支持的存儲引擎:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com