MySQL2:四種MySQL儲存引擎

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/xrq730/p/4937222.html

前言

資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進 行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。MySql的核心就是儲存引擎

 

儲存引擎查看

MySQL給開發人員提供了查詢儲存引擎的功能,我這裡使用的是MySQL5.1,可以使用:

SHOW ENGINES

命令來查看MySQL使用的引擎,命令的輸出為(我用的Navicat Premium):

看到MySQL給使用者提供了這麼多儲存引擎,包括處理事務安全表的引擎和出來了非事物安全表的引擎。

如果要想查看資料庫預設使用哪個引擎,可以通過使用命令:

SHOW VARIABLES LIKE ‘storage_engine‘;

來查看,查詢結果為:

在MySQL中,不需要在整個伺服器中使用同一種儲存引擎,針對具體的要求,可以對每一個表使用不同的儲存引擎。Support列的值表示某種引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示該引擎為當前預設的儲存引擎 。下面來看一下其中幾種常用的引擎。

 

InnoDB儲存引擎

InnoDB是事務型資料庫的首選引擎,支援事務安全表(ACID),支援行鎖定和外鍵,也看到了,InnoDB是預設的MySQL引擎。InnoDB主要特性有:

1、InnoDB給MySQL提供了具有提交、復原和崩潰恢複能力的事物安全(ACID相容)儲存引擎。InnoDB鎖定在行級並且也在SELECT語句中提供一個類似Oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySQL的表類型混合起來,甚至在同一個查詢中也可以混合

2、InnoDB是為處理巨大資料量的最大效能設計。它的CPU效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的

3、InnoDB儲存引擎完全與MySQL伺服器整合,InnoDB儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。InnoDB將它的表和索引在一個邏輯資料表空間中,資料表空間可以包含數個檔案(或原始磁碟檔案)。這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的檔案中。InnoDB表可以是任何尺寸,即使在檔案尺寸被限制為2GB的作業系統上

4、InnoDB支援外鍵完整性條件約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行產生一個6位元組的ROWID,並以此作為主鍵

5、InnoDB被用在眾多需要高效能的大型資料庫網站上

InnoDB不建立目錄,使用InnoDB時,MySQL將在MySQL資料目錄下建立一個名為ibdata1的10MB大小的自動擴充資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的記錄檔

 

MyISAM儲存引擎

MyISAM基於ISAM儲存引擎,並對其進行擴充。它是在Web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。MyISAM擁有較高的插入、查詢速度,但不支援事物。MyISAM主要特性有:

1、大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援

2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少片段。這要通過合并相鄰被刪除的塊,以及若下一個塊被刪除,就擴充到下一塊自動完成

3、每個MyISAM表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16

4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,一個超過1024位元組的鍵將被用上

5、BLOB和TEXT列可以被索引

6、NULL被允許在索引的列中,這個值占每個鍵的0~1個位元組

7、所有數字索引值以高位元組優先被儲存以允許一個更高的索引壓縮

8、每個MyISAM類型的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被重新整理。所以說,MyISAM類型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快

9、可以把資料檔案和索引檔案放在不同目錄

10、每個字元列可以有不同的字元集

11、有VARCHAR的表可以固定或動態記錄長度

12、VARCHAR和CHAR列可以多達64KB

使用MyISAM引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案類型:frm檔案儲存體表定義、資料檔案的副檔名為.MYD(MYData)、索引檔案的副檔名時.MYI(MYIndex)

 

MEMORY儲存引擎

MEMORY儲存引擎將表中的資料存放區到記憶體中,未查詢和引用其他表資料提供快速存取。MEMORY主要特性有:

1、MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度

2、MEMORY儲存引擎執行HASH和BTREE縮影

3、可以在一個MEMORY表中有非唯一索引值

4、MEMORY表使用一個固定的記錄長度格式

5、MEMORY不支援BLOB或TEXT列

6、MEMORY支援AUTO_INCREMENT列和對可包含NULL值的列的索引

7、MEMORY表在所由用戶端之間共用(就像其他任何非TEMPORARY表)

8、MEMORY表記憶體被儲存在記憶體中,記憶體是MEMORY表和伺服器在查詢處理時的空閑中,建立的內部表共用

9、當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的記憶體,應該執行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)

 

儲存引擎的選擇

不同的儲存引擎都有各自的特點,以適應不同的需求,如下表所示:

功  能 MYISAM Memory InnoDB Archive
儲存限制 256TB RAM 64TB None
支援事物 No No Yes No
支援全文索引 Yes No No No
支援數索引 Yes Yes Yes No
支援雜湊索引 No Yes No No
支援資料緩衝 No N/A Yes No
支援外鍵 No No Yes No

如果要提供提交、復原、崩潰恢複能力的事物安全(ACID相容)能力,並要求實現並發控制,InnoDB是一個好的選擇

如果資料表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率

如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的Memory引擎,MySQL中使用該引擎作為暫存資料表,存放查詢的中間結果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支援高並發的插入操作,但是本身不是事務安全的。Archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用Archive

使用哪一種引擎需要靈活選擇,一個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能

 

MySQL2:四種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.