MySQL必知存儲引擎

Mysql存儲引擎

1.MyISAM MySQL 5.0 以前的默認數據庫引擎,最爲經常使用。擁有較高的插入,查詢速度,但不支持事務.sql

2.InnoDB事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定, MySQL 5.5 起成爲默認數據庫引擎.數據庫

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 存儲引擎不支持索引。spa

10.BlackHole 黑洞引擎,寫入的任何數據都會消失,通常用於記錄 binlog 作複製的中繼設計

11.EXAMPLE 存儲引擎是一個不作任何事情的存根引擎。它的目的是做爲 MySQL 源代碼中的一個例子,用來演示如何開始編寫一個新存儲引擎。一樣,它的主要興趣是對開發者。EXAMPLE 存儲引擎不支持編索引。另外,MySQL 的存儲引擎接口定義良好。有興趣的開發者能夠經過閱讀文檔編寫本身的存儲引擎。

InnoDB

InnoDB是MySQL默認的事務型存儲引擎,只有在須要他不支持的特性時,才考慮使用期它存儲引擎。

實現了四個標準的隔離級別,默認級別是可重複讀(REPEATABLE READ).在可重複讀隔離級別下,經過多版本併發控制(MVCC)+Next-Key Locking防止幻讀。

主索引是聚簇索引,在索引中保存了數據,從而避免直接讀取磁盤,所以對查詢性能有很大的提高。

內部作了不少優化,包括從磁盤讀取數據時採用的可預測性讀、可以加快讀操做而且自動建立的自適應哈希索引、可以加速插入操做的插入緩衝區等。

支持真正的在線熱備份。其它存儲引擎不支持在線熱備份,要獲取一致性視圖須要中止對全部表的寫入,而在讀寫混合場景中,中止寫入可能也意味着中止讀取。

MyISAM

設計簡單,數據以緊密格式存儲。對於只讀數據,或者表比較小、能夠容忍修復操做,則依然可使用它。

提供了大量的特性,包括壓縮表、空間數據索引等。

不支持事務。

不支持行級鎖,只能對整張表加鎖,讀取時會對須要讀到的全部表加共享鎖,寫入時則對錶加排它鎖。但在表有讀取操做的同時,也能夠往表中插入新的記錄,這被稱爲併發插入(CONCURRENT INSERT)。

能夠手工或者自動執行檢查和修復操做,可是和事務恢復以及崩潰恢復不一樣,可能致使一些數據丟失,並且修復操做是很是慢的。

若是指定了 DELAY_KEY_WRITE 選項,在每次修改執行完成時,不會當即將修改的索引數據寫入磁盤,而是會寫到內存中的鍵緩衝區,只有在清理鍵緩衝區或者關閉表的時候纔會將對應的索引塊寫入磁盤。這種方式能夠極大的提高寫入性能,可是在數據庫或者主機崩潰時會形成索引損壞,須要執行修復操做。

比較

  • 事務:InnoDB 是事務型的,可使用 Commit 和 Rollback 語句。
  • 併發:MyISAM 只支持表級鎖,而 InnoDB 還支持行級鎖。
  • 外鍵:InnoDB 支持外鍵。
  • 備份:InnoDB 支持在線熱備份。
  • 崩潰恢復:MyISAM 崩潰後發生損壞的機率比 InnoDB 高不少,並且恢復的速度也更慢。
  • 其它特性:MyISAM 支持壓縮表和空間數據索引。
相關文章
相關標籤/搜索