MySQL存儲引擎

在MySQL中,不須要在整個服務器中使用同一種存儲引擎,針對具體的要求,能夠對每個表使用不一樣的存儲引擎html

1、MyISAM
1. 不支持事務,也不支持外鍵,但訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本均可以使用這個引擎來建立表。
2. 使用MyISAM引擎建立數據庫表,將產生3個文件。其中文件名和表名都相同,擴展名分別爲:
.frm(存儲表定義)、.MYD(MYData,存儲數據)、.MYI(MYIndex,存儲索引),以下圖所示:表t4一共有三個文件
node:數據文件和索引文件放在不一樣目錄,以平均分配IO,獲取更快的速度。
3. MyISAM引擎使用B+Tree做爲索引結構,葉節點的data域存放的是數據記錄的地址。node

2、InnoDB(MySQL默認的存儲引擎)
InnoDB是一個健壯的事務型存儲引擎,支持行級鎖定和外鍵約束
在如下場合下,使用InnoDB是最理想的選擇:
1.更新密集的表。InnoDB存儲引擎特別適合處理多重併發的更新請求。
2.事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
3.自動災難恢復。與其它存儲引擎不一樣,InnoDB表可以自動從災難中恢復。
4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。
5.支持自動增長列AUTO_INCREMENT屬性。mysql

通常來講,若是須要事務支持,而且有較高的併發讀取頻率,InnoDB是不錯的選擇。sql

InnoDB 和 MyISAM之間的區別:
1>.InnoDB支持事物,而MyISAM不支持事物數據庫

2>.InnoDB支持外鍵,而MyISAM不支持服務器

3>.InnoDB支持行級鎖,而MyISAM支持表級鎖併發

4>.InnoDB支持MVCC, 而MyISAM不支持spa

5>.InnoDB不支持全文索引,而MyISAM支持。.net

6>.InnoDB和MyISAM索引區別
雖然InnoDB也使用B+Tree做爲索引結構,但具體實現方式卻與MyISAM大相徑庭。
1). InnoDB的數據文件自己就是索引文件。
2). InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址3d

3、MEMORY
Memory存儲引擎的出發點是速度(MEMORY存儲引擎將表中的數據存儲到系統內存中)
通常在如下幾種狀況下使用Memory存儲引擎:
1.目標數據較小,並且被很是頻繁地訪問。在內存中存放數據,因此會形成內存的使用,能夠經過參數max_heap_table_size控制Memory表的大小,設置此參數,就能夠限制Memory表的最大大小。
2.若是數據是臨時的,並且要求必須當即可用,那麼就能夠存放在內存表中。
3.存儲在Memory表中的數據若是忽然丟失,不會對應用服務產生實質的負面影響。

Memory同時支持散列索引和B樹索引。

存儲在內存中帶來的問題
1. 當mysqld守護進程崩潰時,全部的Memory數據都會丟失。
2. 由於存儲在內存中,因此要求存儲在Memory數據表裏的數據使用的是長度不變的格式,這意味着不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但由於它在MySQL內部當作長度固定不變的CHAR類型,因此可使用。

4、ARCHIVE
Archive是歸檔的意思,在歸檔以後不少的高級功能就再也不支持了,僅僅支持最基本的插入和查詢兩種功能。
在MySQL 5.5版之前,Archive是不支持索引,可是在MySQL 5.5之後的版本中就開始支持索引了。Archive擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮,因此它常常被用來當作倉庫使用。

5、MERGE(MySQL5.0中名爲:MRG_MYISAM)
MERGE存儲引擎是一組MyISAM表的組合

參考:

http://www.javashuo.com/article/p-sowscbpi-ba.html

http://www.javashuo.com/article/p-kuhcugnk-gt.html

相關文章
相關標籤/搜索