Mysql的儲存引擎介紹

來源:互聯網
上載者:User

標籤:依賴   mit   缺陷   city   插入資料   檔案儲存體   速度   資料庫   並發控制   

下面主要介紹InnoDB、MyISAM和MEMEORY三種儲存引擎。

InnoDB儲存引擎

InnoDB遵循CNU通用公開許可(GPL)發行。InnoDB已經被一些重量級互連網公司所採用,如雅虎、Slashdot和Google,為使用者操作大型資料庫提供了一個強大的解決方案。InnoDB給MySQL的表提供了事務、復原、崩潰修複能力和多版本並發控制的事務安全。MySQL從3.23.34a開始包含InnoDB儲存引擎。InnoDB是MySQL上第一個提供外鍵約束的表引擎,而且InnoDB對交易處理的能力,也是MySQL其他儲存引擎所無法比擬的。下面介紹InnoDB儲存引擎的特點及缺點。

InnoDB儲存引擎中支援自動成長列AUTO_INCREMENT。自動成長列的值不可為空,且值必須唯一。MySQL中規定自增列必須為主鍵。在插入值時,如果自動成長列不輸入值,則插入的值為自動成長後的值;如果輸入的值為0或空(NULL),則插入的值也為自動成長後的值;如果插入某個確定的值,且該值在前面沒有出現過,則可以直接插入。

InnoDB儲存引擎中支援外鍵(FOREIGN KEY)。外鍵所在的表為子表,外鍵所依賴的表為父表。父表中被子表外部索引鍵關聯的欄位必須為主鍵。當刪除、更新父表的某條資訊時,子表也必須有相應的改變。InnoDB儲存引擎中,建立的表的表結構儲存在.frm檔案中。資料和索引儲存在innodb_data_home_dir和innodb_data_file_path資料表空間中。

InnoDB儲存引擎的優勢在於提供了良好的交易管理、崩潰修複能力和並發控制。缺點是其讀寫效率稍差,佔用的資料空間相對比較大。

InnoDB表是以下情況的理想引擎:

更新密集的表:InnoDB儲存引擎特別適合處理多重並發的更新要求。

事務:InnoDB儲存引擎是唯一支援事務的標準MySQL儲存引擎,這是管理敏感性資料(如金融資訊和使用者註冊資訊)的必需軟體。

自動災難恢複:與其他儲存引擎不同,InnoDB表能夠自動從災難中恢複。雖然MyISAM表能在災難後修複,但其過程要長得多。

Oracle的InnoDB儲存引擎廣泛應用於基於MySQL的Web、電子商務、金融系統、健康護理以及零售應用。因為InnoDB可提供高效的ACID獨立性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)相容交易處理能力,以及獨特的高效能和具有可擴充性的構架要素。

另外,InnoDB設計用於交易處理應用,這些應用需要處理崩潰恢複、參照完整性、進階別的使用者並發數,以及回應時間逾時。在MySQL 5.5中,最顯著的增強效能是將InnoDB作為預設的儲存引擎。在MyISAM以及其他表類型依然可用的情況下,使用者無需更改配置,就可構建基於InnoDB的應用程式。

MyISAM儲存引擎

MyISAM儲存引擎是MySQL中常見的儲存引擎,曾是MySQL的預設儲存引擎。MyISAM儲存引擎是基於ISAM儲存引擎發展起來的,它解決了ISAM的很多不足。MyISAM增加了很多有用的擴充。

MyISAM儲存引擎的檔案類型

MyISAM儲存引擎的表格儲存體成3個檔案。檔案的名字與表名相同。副檔名包括frm、myd和myi。

frm:儲存表的結構;

myd:儲存資料,是MYData的縮寫;

myi:儲存索引,是MYIndex的縮寫。

MyISAM儲存引擎的儲存格式

基於MyISAM儲存引擎的表支援3種不同的儲存格式,包括靜態型、動態型和壓縮型。

(1)靜態型。如果所有表列的大小都是靜態(即不使用xBLOB、xTEXT或VARCHAR資料類型),MySQL就會自動使用靜態MyISAM格式。使用這種類型的表效能非常高,因為在維護和訪問以預定義格式儲存的資料時需要很低的開銷。但是,這項優點要以空間為代價,因為每列都需要分配給該列的最大空間,而無論該空間是否真正地使用。

(2)動態型。如果有表列(即使只有一列)定義為動態(使用xBLOB、xTEXT或VARCHAR資料類型),MySQL就會自動使用動態格式。雖然MyISAM動態表佔用的空間比靜態表所佔空間少,但空間的節省帶來了效能的下降。如果某個欄位的內容發生改變,則其位置很可能就需要移動,這會導致片段的產生。隨著資料集中的片段增加,資料訪問效能就會相應降低。這個問題有兩種修複方法:儘可能使用待用資料類型。經常使用OPTIMIZE TABLE語句,它會整理表的片段,恢複由於表更新和刪除而導致的空間丟失。

(3)壓縮型。有時會建立在整個應用程式生命週期中都唯讀表。如果是這種情況,就可以使用myisampack工具將其轉換為MyISAM壓縮表來減少空間。在給定硬體設定下(例如,快速的處理器和低速的硬碟),效能的提升將相當顯著。

MyISAM儲存引擎的優缺點

MyISAM儲存引擎的優點在於佔用空間小,處理速度快。缺點是不支援事務的完整性和並發性。

MEMORY儲存引擎

MEMORY儲存引擎是MySQL中的一類特殊的儲存引擎。其使用儲存在記憶體中的內容來建立表,而且所有資料也放在記憶體中。這些特性都與InnoDB儲存引擎、MyISAM儲存引擎不同。下面將對MEMORY儲存引擎的檔案儲存體形式、索引類型、儲存周期和優缺點進行講解。

MEMORY儲存引擎的檔案儲存體形式

每個基於MEMORY儲存引擎的表實際對應一個磁碟檔案。該檔案的檔案名稱與表名相同,類型為frm。該檔案中只儲存表的結構,而其資料檔案,都是儲存在記憶體中。這樣有利於對資料的快速處理,提高整個表的處理效率。值得注意的是,伺服器需要有足夠的記憶體來維持MEMORY儲存引擎的表的使用。如果不需要使用了,可以釋放這些內容,甚至可以刪除不需要的表。

MEMORY儲存引擎的索引類型

MEMORY儲存引擎預設使用雜湊(HASH)索引。其速度要比使用B型樹(BTREE)索引快。如果希望使用B型樹索引,可以在建立索引時選擇使用。

MEMORY儲存引擎的儲存周期

MEMORY儲存引擎通常很少用到。因為MEMORY表的所有資料是儲存在記憶體上的,如果記憶體出現異常就會影響到資料的完整性。如果重啟機器或者關機,表中的所有資料將消失。因此,基於MEMORY儲存引擎的表生命週期很短,一般都是一次性的。

MEMORY儲存引擎的優缺點

MEMORY表的大小是受到限制的。表的大小主要取決於兩個參數,分別是max_rows和max_heap_table_size。其中,max_rows可以在建立表時指定;max_heap_table_size的大小預設為16MB,可以按需要進行擴大。因為其存在於記憶體中的特性,所以這類表的處理速度非常快。但是,其資料易丟失,生命週期短。

建立MySQL MEMORY儲存引擎的出發點是速度。為得到最快的回應時間,採用的邏輯儲存介質是系統記憶體。雖然在記憶體中儲存表資料確實會提高效能,但要記住,當mysqld守護進程崩潰時,所有的MEMORY資料都會丟失。

MEMORY表不支援VARCHAR、BLOB和TEXT資料類型,因為這種表類型按固定長度的記錄格式儲存。此外,如果使用4.1.0之前的MySQL版本,則不支援自動增加列(通過AUTO_INCREMENT屬性)。要記住MEMORY表只用於特殊的範圍,不會用於長期儲存資料。基於這個缺陷,選擇MEMORY儲存引擎時要特別小心。

當資料有以下情況時,可以考慮使用MEMORY表:

暫時:目標資料只是臨時需要,在其生命週期中必須立即可用。

相對無關:儲存在MEMORY表中的資料如果突然丟失,不會對應用服務產生實質的負面影響,而且不會對資料完整性有長期影響。

如果使用MySQL4.1以及之前版本,MEMORY的搜尋比MyISAM表的搜尋效果要低,因為MEMORY表只支援散列索引,這需要使用整個鍵進行搜尋。但是,4.1之後的版本同時支援散列索引和B樹索引。B樹索引優於散列索引的是,可以使用部分查詢和通配查詢,也可以使用<、>和>=等操作符方便資料採礦。

如何選擇儲存引擎

每種儲存引擎都有各自的優勢,不能籠統地說誰比誰更好,只有適合不適合。下面根據其不同的特性,給出選擇儲存引擎的建議。

InnoDB儲存引擎:用於交易處理應用程式,具有眾多特性,包括ACID事務支援、支援外鍵。同時支援崩潰修複能力和並發控制。如果對事務的完整性要求比較高,要求實現並發控制,那選擇InnoDB儲存引擎有很大的優勢。需要頻繁地進行更新、刪除操作的資料庫,也可以選擇InnoDB儲存引擎。因為,該類儲存引擎可以實現事務的提交(Commit)和復原(Rollback)。

MyISAM儲存引擎:管理非事務表,它提供高速儲存和檢索,以及全文檢索搜尋能力。MyISAM儲存引擎插入資料快,空間和記憶體使用量比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇MyISAM儲存引擎能實現處理的高效率。如果應用的完整性、並發性要求很低,也可以選擇MyISAM儲存引擎。

MEMORY儲存引擎:MEMORY儲存引擎提供“記憶體中”表,MEMORY儲存引擎的所有資料都在記憶體中,資料的處理速度快,但安全性不高。如果需要很快的讀寫速度,對資料的安全性要求較低,可以選擇MEMORY儲存引擎。MEMORY儲存引擎對錶的大小有要求,不能建太大的表。所以,這類資料庫只使用相對較小的資料庫表。

 

 

 

 

 

Mysql的儲存引擎介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.