MySQL存儲引擎總結

存儲引擎
存儲引擎其實就是如何實現存儲數據,如何爲存儲的數據創建索引以及如何更新,查詢數據等技術實現的方法。
存儲引擎的選擇
(1)是否須要支持事務;
(2)是否須要使用熱備;
(3)崩潰恢復:可否接受崩潰;
(4)是否須要外鍵支持;
MyISAM
1)每當創建一個MyISAM引擎的表時,就會在本地磁盤上創建三個文件
1.tb_demo.frm,存儲表定義;
2.tb_demo.MYD,存儲數據;
3.tb_demo.MYI,存儲索引。
注意:
數據文件和索引文件能夠放置在不一樣的目錄,平均分配IO,獲取更快的速度
2)MyISAM也是使用B+tree索引可是和Innodb的在具體實現上有些不一樣。mysql

適用性
1.選擇密集型的表。MyISAM存儲引擎在篩選大量數據時很是迅速,這是它最突出的優勢
2.插入密集型的表。MyISAM的併發插入特性容許同時選擇和插入數據。例如:MyISAM存儲引擎很適合管理郵件或Web服務器日誌數據。
3 MyISAM 這種存儲引擎不支持事務,不支持行級鎖,也不支持外鍵,只支持併發插入的表鎖,主要用於高負載的select。
對訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本均可以使用這個引擎來建立表。sql

4 MyISAM 類型的表支持三種不一樣的存儲結構:靜態型、動態型、壓縮型。數據庫

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

使用靜態格式的表的性能比較高,由於在維護和訪問的時候以預約格式存儲數據時須要的開銷很低。可是這高性能是有空間換來的,由於在定義的時候是固定的,因此無論列中的值有多大,都會以最大值爲準,佔據了整個空間。

(2)動態型:若是列(即便只有一列)定義爲動態的(xblob, xtext, varchar等數據類型),這時myisam就自動使用動態型,雖然動態型的表佔用了比靜態型表較少的空間,但帶來了性能的下降,由於若是某個字段的內容發生改變則其位置極可能須要移動,這樣就會致使碎片的產生。隨着數據變化的怎多,碎片就會增長,數據訪問性能就會相應的下降。服務器

對於由於碎片的緣由而下降數據訪問性,有兩種解決辦法:

 @1、儘量使用靜態數據類型
 @2、常用optimize   table語句,他會整理表的碎片,恢復因爲表的更新和刪除致使的空間丟失。
(若是存儲引擎不支持 optimize  table    則能夠轉儲並從新加載數據,這樣也能夠減小碎片)

(3)壓縮型:若是在這個數據庫中建立的是在整個生命週期內只讀的表,則這種狀況就是用myisam的壓縮型表來減小空間的佔用。併發

InnoDB
1nnoDB是一個健壯的事務型存儲引擎
2對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些而且會佔用更多的磁盤空間以保留數據和索引。
適用性
1.更新密集的表。InnoDB存儲引擎特別適合處理多重併發的更新請求。
2.事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
3.自動災難恢復。與其它存儲引擎不一樣,InnoDB表可以自動從災難中恢復。
4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。
5.支持自動增長列AUTO_INCREMENT屬性。性能

MEMORY
1使用MySQL Memory存儲引擎的出發點是速度。爲獲得最快的響應時間,採用的邏輯存儲介質是系統內存。
2當mysqld守護進程崩潰時,全部的Memory數據都會丟失
3要求存儲在Memory數據表裏的數據使用的是長度不變的格式,
不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但由於它在MySQL內部當作長度固定不變的CHAR類型,因此可使用。
4每一個基於memory存儲引擎的表實際對應一個磁盤文件,該文件的文件名和表名是相同的,類型爲.frm。該文件只存儲表的結構,而其數據文件,都是存儲在內存中,這樣有利於對數據的快速處理,提升整個表的處理能力。
5 默認狀況下,memory數據表使用哈希(HASH)索引,利用這種索引進行」相等比較」很是快,可是對」範圍比較」的速度就慢多了。所以,散列索引值適合使用在」=」和」<>」的操做符中,不適合使用在」<」或」>」操做符中,也一樣不適合用在order by字句裏。若是確實要使用」<」或」>」或betwen操做符,可使用btree索引來加快速度。
適用性
1.目標數據較小,並且被很是頻繁地訪問。在內存中存放數據,因此會形成內存的使用,能夠經過參數max_heap_table_size控制Memory表的大小,設置此參數,就能夠限制Memory表的最大大小。
2.若是數據是臨時的,並且要求必須當即可用,那麼就能夠存放在內存表中。
3.存儲在Memory表中的數據若是忽然丟失,不會對應用服務產生實質的負面影響。spa

MERGE
1merge存儲引擎是一組MyISAM表的組合,這些MyISAM表結構必須徹底相同
2MERGE表中並無數據,對MERGE類型的表能夠進行查詢、更新、刪除的操做,這些操做其實是對內部的MyISAM表進行操做。
適用性
1對於服務器日誌這種信息,通常經常使用的存儲策略是將數據分紅不少表,每一個名稱與特定的時間端相關。例如:能夠用12個相同的表來存儲服務器日誌數據,每一個表用對應各個月份的名字來命名。當有必要基於全部12個日誌表的數據來生成報表,這意味着須要編寫並更新多表查詢,以反映這些表中的信息。與其編寫這些可能出現錯誤的查詢,不如將這些表合併起來使用一條查詢,以後再刪除Merge表,而不影響原來的數據,刪除Merge表只是刪除Merge表的定義,對內部的表沒有任何影響。日誌

ARCHIVE
1僅僅支持最基本的插入和查詢兩種功能。
適用性
1用來當作倉庫使用。code

相關文章
相關標籤/搜索