mysql各儲存引擎之間的區別
為了做出選擇哪一個儲存引擎的決定,我們首先需要考慮每一個儲存引擎提供了哪些不同的核心功能。這種功能使我們能夠把不同的儲存引擎區別開來。我們一般把這些核心功能分為四類:支援的欄位和資料類型、鎖定類型、索引和處理。一些引擎具有能過促使你做出決定的獨特的功能,我們一會兒再仔細研究這些具體問題。
欄位和資料類型
雖然所有這些引擎都支援通用的資料類型,例如整型、實型和字元型等,但是,並不是所有的引擎都支援其它的欄位類型,特別是BLOG(二進位大對象)或者TEXT文本類型。其它引擎也許僅支援有限的字元寬度和資料大小。
這些局限性可能直接影響到你可以儲存的資料,同時也可能會對你實施的搜尋的類型或者你對那些資訊建立的索引產生間接的影響。這些區別能夠影響你的應用程式的效能和功能,因為你必須要根據你要儲存的資料類型選擇對需要的儲存引擎的功能做出決策。
鎖定
資料庫引擎中的鎖定功能決定了如何管理資訊的訪問和更新。當資料庫中的一個對象為資訊更新鎖定了,在更新完成之前,其它處理不能修改這個資料(在某些情況下還不允許讀這種資料)。
鎖定不僅影響許多不同的應用程式如何更新資料庫中的資訊,而且還影響對那個資料的查詢。這是因為查詢可能要訪問正在被修改或者更新的資料。總的來說,這種延遲是很小的。大多數鎖定機制主要是為了防止多個處理更新同一個資料。由於向資料中插入資訊和更新資訊這兩種情況都需要鎖定,你可以想象,多個應用程式使用同一個資料庫可能會有很大的影響。
不同的儲存引擎在不同的對象層級支援鎖定,而且這些層級將影響可以同時訪問的資訊。得到支援的層級有三種:表鎖定、塊鎖定和行鎖定。支援最多的是表鎖定,這種鎖定是在MyISAM中提供的。在資料更新時,它鎖定了整個表。這就防止了許多應用程式同時更新一個具體的表。這對應用很多的多使用者資料庫有很大的影響,因為它延遲了更新的過程。
頁級鎖定使用Berkeley DB引擎,並且根據上傳的資訊頁(8KB)鎖定資料。當在資料庫的很多地方進行更新的時候,這種鎖定不會出現什麼問題。但是,由於增加幾行資訊就要鎖定資料結構的最後8KB,當需要增加大量的行,也別是大量的小型資料,就會帶來問題。
行級鎖定提供了最佳的並行訪問功能,一個表中只有一行資料被鎖定。這就意味著很多應用程式能夠更新同一個表中的不同行的資料,而不會引起鎖定的問題。只有InnoDB儲存引擎支援行級鎖定。
建立索引
建立索引在搜尋和恢複資料庫中的資料的時候能夠顯著提高效能。不同的儲存引擎提供不同的製作索引的技術。有些技術也許會更適合你儲存的資料類型。
有些儲存引擎根本就不支援索引,其原因可能是它們使用基本表索引(如MERGE引擎)或者是因為資料存放區的方式不允許索引(例如FEDERATED或者BLACKHOLE引擎)。
交易處理
交易處理功能通過提供在向表中更新和插入資訊期間的可靠性。這種可靠性是通過如下方法實現的,它允許你更新表中的資料,但僅當應用的應用程式的所有相關操作完全完成後才接受你對錶的更改。例如,在會計處理中每一筆會計分錄處理將包括對借方科目和貸方科目資料的更改,你需要要使用交易處理功能保證對借方科目和貸方科目的資料更改都順利完成,才接受所做的修改。如果任一項操作失敗了,你都可以取消這個交易處理,這些修改就不存在了。如果這個交易處理過程完成了,我們可以通過允許這個修改來確認這個操作。