天天看點

mysql BDB存儲引擎_mysql中的存儲引擎

MySQL中常用的幾種存儲引擎:innoDB、bdb、myisam、memory以及這幾個引擎的講解;

InnoDB存儲引擎:

(1) innodb存儲引擎該mysql表提供了事務,復原以及系統崩潰修複能力和多版本迸發控制的事務的安全。

(2)innodb支援自增長列(auto_increment),自增長列的值不能為空,如果在使用的時候為空的話怎會進行自動存現有的值開始增值,如果有但是比現在的還大,則就儲存這個值。

(3)innodb存儲引擎支援外鍵(foreign key) ,外鍵所在的表稱為子表而所依賴的表稱為父表。

(4)innodb存儲引擎最重要的是支援事務,以及事務相關聯功能。

(5)innodb存儲引擎支援mvcc的行級鎖。

MyISAM存儲引擎:

1、MyISAM這種存儲引擎不支援事務,不支援行級鎖,隻支援并發插入的表鎖,主要用于高負載的select。

2、myisam類型的表支援三種不同的存儲結構:靜态型、動态型、壓縮型。

(1)靜态型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的資料類型),這樣mysql就會自動使用靜态myisam格式。

使用靜态格式的表的性能比較高,因為在維護和通路的時候以預定格式存儲資料時需要的開銷很低。但是這高性能是有空間換來的,因為在定義的時候是固定的,是以不管列中的值有多大,都會以最大值為準,占據了整個空間。

(2)動态型:如果列(即使隻有一列)定義為動态的(xblob, xtext, varchar等資料類型),這時myisam就自動使用動态型,雖然動态型的表占用了比靜态型表較少的空間,但帶來了性能的降低,因為如果某個字段的内容發生改變則其位置很可能需要移動,這樣就會導緻碎片的産生。随着資料變化的怎多,碎片就會增加,資料通路性能就會相應的降低。

對于因為碎片的原因而降低資料通路性,有兩種解決辦法:

@1、盡可能使用靜态資料類型

@2、經常使用optimize   table語句,他會整理表的碎片,恢複由于表的更新和删除導緻的空間丢失。

(如果存儲引擎不支援 optimize  table    則可以轉儲并重新加載資料,這樣也可以減少碎片)

(3)壓縮型:如果在這個資料庫中建立的是在整個生命周期内隻讀的表,則這種情況就是用myisam的壓縮型表來減少空間的占用。

MEMORY存儲引擎:

(1)memory存儲引擎相比前面的一些存儲引擎,有點不一樣,其使用存儲在内從中的資料來建立表,而且所有的資料也都存儲在記憶體中。

(2)每個基于memory存儲引擎的表實際對應一個磁盤檔案,該檔案的檔案名和表名是相同的,類型為.frm。該檔案隻存儲表的結構,而其資料檔案,都是存儲在記憶體中,這樣有利于對資料的快速處理,提高整個表的處理能力。

(3)memory存儲引擎預設使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果讀者希望使用B樹型,則在建立的時候可以引用。

(4)memory存儲引擎檔案資料都存儲在記憶體中,如果mysqld程序發生異常,重新開機或關閉機器這些資料都會消失。是以memory存儲引擎中的表的生命周期很短,一般隻使用一次。

BlackHole存儲引擎:

(1)支援事務,而且支援mvcc的行級鎖,主要用于日志記錄或同步歸檔,這個存儲引擎除非有特别目的,否則不适合使用!