萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> 數據庫綜合 >> Mysql存儲引擎分享

Mysql存儲引擎分享

大家知道Mysql存儲引擎嗎?MySQL5.5以後默認使用InnoDB存儲引擎,其中InnoDB和BDB提供事務安全表,其它存儲引擎都是非事務安全表。

存儲引擎的介紹

關系型數據庫表是用來存儲和組織信息的數據結構,可以將表理解為由行和列組成的表格。

由於表的類型不同,我們在實際開發過程中,就有可能需要各種各樣的表,不同的表就意味著存儲不同類型的數據,數據的處理上也會存在差異

對於Mysql來說,它提供了很多種類型的存儲引擎

存儲引擎說白了就是如何存儲數據,如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。

因為在關系型數據庫中數據的存儲是以表的形式存儲 的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)

Mysql中的存儲引擎

MyISAM

這種引擎是mysql最早提供的,這種引擎又可以分為靜態MyISAM、動態MyISAM和壓縮MyISAM三種

靜態MyISAM:

如果數據表中的各數據列的長度都是預先固定好的,服務器將自動選擇這種表類型。

因為數據表中的每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。

當數據受損時,恢復工作也比較容易做

動態MyISAM:

如果數據表中出現varchar,xxxtext或xxxxBLOB字段時,服務器將自動選擇這種表類型 。

相對於靜態MyISAM,這種表存儲空間比較小,但由於每條記錄的長度不一,所以多次修改數據後,數據表中的數據就可能離散的存儲在內存中,進而導致執行效率下降.

同時內存中也可能會出現很多碎片。

因此這種類型的表要經常 用optimize table命令 或優化工具來進行碎片整理

壓縮MyISAM:

以上說的兩種類型的表都可以用myisamchk工具壓縮。

這種類型的表進一步減少了占用的存儲。

但是這種表壓縮之後不能再被修改。

另外,因為是壓縮數據,所以這種表在讀取的時候要先執行解壓縮

但是,不管是哪種MyISAM表,目前都不支持事務,行級鎖和外鍵約束的功能

MyISAM表示獨立於操作系統的,這說明可以輕松的將其從windows服務器轉移 到linux服務器;

每當我們建立一個MyISAM引擎的表時,就會在本地磁盤上建立三個文件,文件名就是表名。

例如:我建立一個MyISAM引擎的th_Demo表,那麼就會生成以下三個文件:

1.th_demo.frm:存儲表定義;

2.th_demo.MYD:存儲數據;

3.th_demo.MYI:存儲索引;

MyISAM存儲引擎特別適合在以下幾種情況下使用:

1.選擇密集型的表,MYISAM存儲引擎在篩選大量數據時非常迅速,這是它最突出的優點

2.插入密集型的表,MYISAM的並發插入特性允許同時選擇和插入數據。例如:MYISAM存儲引擎很適合管理郵件或web服務器日志數據

InnoDB

InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能

InnoDB是一個健壯的事務型存儲引擎

使用場景:

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

2.事務.InnoDB存儲引擎是支持事務的標准mysql存儲引擎

3.自動災難恢復。與其他存儲引擎不同,InnoDB表能夠自動從災難中恢復

4.外鍵約束。mysql支持外鍵的存儲引擎只有InnoDB

5.支持自動增加列AUTO_INCREMENT屬性

一般來說,如果需要事務支持,並且有較高的並發讀取頻率,InnoDB是不錯的選擇

memory(heap)

使用Mysql Memory存儲引擎的出發點是速度,為了得到最快的響應時間

采用的邏輯存儲介質是系統內存。

它要求存儲在Memory數據表裡的數據使用的是長度不變的格式,這意味著不能使用BLOB和Text這樣的長度可變的數據類型

VARCHAR是一種長度可變的類型,但因為它在Mysql內部當作長度固定不變的CHAR類型,所以可以使用

Memory同時支持散列索引和B樹索引。B樹索引優於散列索引的是:

可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數據挖掘

散列索引進行“相等比較”非常快,但是對"范圍比較"的速度就慢多了

散列索引值適合使用在=和<>的操作符,不適合<或>操作符中,也同樣不適合在order by子句中

一般在以下幾種情況下使用Memory存儲引擎:

1.目標數據較小,而且被非常頻繁地訪問。

在內存中存放數據,所以會造成內存的使用,可以通過參數max_heap_table_size控制memory表的大小,設置此參數,就可以限制Memory表的最大大小了。

2.如果數據是臨時的,而且要求必須立即可用,那麼就可以存放在內存表中

3.存儲在Memory表中的數據如果突然丟失,不會對應用服務器產生實質的負面影響

archive

archive是歸檔的意思,在歸檔之後很多的高級功能就不再支持了,僅僅支持最基本的插入和查詢兩種功能。

mysql5.5版本以前,Archive是不支持索引,但是在Mysql以後的版本中就開始支持索引了。

Archive擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮,所以它經常被用來當作倉庫使用

常用於日志記錄和聚合分析方面

MERGE

MERGE存儲引擎是一組MyISAM表的組合,這些MYISAM表結構必須完全相同,盡管其使用不如其他引擎突出,但是在某些情況下非常有用

Merge表就是幾個相同MyISAM表的聚合器

Merge表中並沒有數據,對Merge類型的表可以進行查詢、更新、刪除操作

這些操作實際上是對內部的MyISAM表進行操作

Merge存儲引擎的使用場景:

對於服務器日志這種信息,一般常用的存儲策略是將數據分成很多表,每個名稱與特定的時間端相關

刪除Merge表只是刪除Merge表的定義,對內部的表沒有任何影響

Mysql中關於存儲引擎的操作

1.查看數據庫可以支持的存儲引擎

show engines;

2.查看表的結構等信息的若干命令

desc tablename:查看數據表的結構

show create table tablename:顯示表的創建語句

show table status like 'tablename'\G:顯示表的當前狀態值

3.設置或修改表的存儲引擎

create table tablename(

columnname(列名1) type(數據類型) attri(屬性設置),

columnname(列名1) type(數據類型) attri(屬性設置),

)engine= enginename:創建數據庫表時設置存儲存儲引擎

Alter table tablename engine = engineName:修改存儲引擎

相信大家已經了解Mysql存儲引擎了吧!感謝大家對我們網站的支持!

相關推薦:

MySQL創建全文索引的方法

 


copyright © 萬盛學電腦網 all rights reserved