1. 程式人生 > >MySQL引擎詳解

MySQL引擎詳解

MySQL的儲存引擎是MySQL體系架構中的重要組成部分,也是MySQL體系結構的核心,外掛式的儲存引擎更是它區別於其它資料庫的重要特徵。它處於MySQL體系架構中Server端底層,是底層物理結構的實現,用於將資料以各種不同的技術方式儲存到檔案或者記憶體中,不同的儲存引擎具備不同的儲存機制、索引技巧和鎖定水平。常見的MySQL儲存引擎有InnoDB、MyISAM、Memory、Archive等等,它們具備各自的特徵,我們可以根據不同的具體應用來建立對應的儲存引擎表。可以使用show table status like ‘表名’ 來顯示錶的相關資訊。

InnoDB

MySQL儲存引擎可以分為官方儲存引擎和第三方儲存引擎,InnoDB就是強大的第三方儲存引擎,具備較好的效能和自動崩潰恢復特性

,目前應用極為廣泛,是當前MySQL儲存引擎中的主流,它在事務型儲存和非事務型儲存中都很流行。
InnoDB是MySQL預設的事務型引擎,也是最重要、使用最廣泛的儲存引擎。InnoDB最大的特點是支援事務。它被用來處理大量的短期事務,短期事務大部分是正常提交的,很少會被回滾。除非特殊需要使用其他搜尋引擎,否則應該優先使用InnoDB引擎。

MyISAM

MyISAM儲存引擎是MySQL官方提供的儲存引擎,它在InnoDB出現並完善之前是MySQL儲存引擎的主流,但目前逐漸被淘汰主要因為其不支援事務,這或許源於MySQL的開發者認為不是所有的應用都需要事務,所以便存在了這種不支援事務的儲存引擎。
在MySQL 5.1及之前的版本中,MyISAM是預設的儲存引擎。MyISAM支援全文索引、壓縮、空間函式等,但是MyISAM不支援事務和行級鎖,而且崩潰後無法安全恢復

。雖然它不支援事務,但是對於只讀或者表比較小時,可以依然使用MyISAM(但是不要預設使用MyISAM,應該預設使用InnoDB)。

MySQL內建的其他儲存引擎

Archive
Archive引擎只支援insert和select操作,適合日誌和資料採集類應用。Archive引擎支援行級鎖和專用的緩衝區,所以可以實現高併發的插入。

CSV
CSV引擎可以將普通csv檔案作為MySQL表處理,但是這種表不支援索引。可以將Excel等電子表格軟體中的資料儲存為csv檔案,然後複製到MySQL資料目錄下,就能在MySQL中開啟使用。所以CSV引擎可以作為一種資料交換的機制。

Memory


如果需要快速訪問資料,且這些資料不會被修改,重啟後丟失也沒關係,則可以使用Memory表(以前也叫做Heap表)

選擇合適的引擎

大部分情況下,InnoDB都是正確的選擇,所以Oracle在MySQL 5.5版本中將InnoDB作為預設的儲存引擎了。考慮儲存引擎時,應先考慮以下幾個因素:

事務

如果需要事務支援,那麼InnoDB是目前最穩定且經過驗證的選擇。如果不需要事務,且主要是select和insert操作,那麼MyISAM是不錯的選擇,一般日誌型應用符合這一特性。

備份

如果可以定期關閉伺服器來執行備份,那麼這個因素可以忽略。反之,若需要線上熱備份,那麼InnoDB就是基本的要求。

崩潰恢復

資料量較大時,系統崩潰後如何快速恢復是一個需要考慮的問題。MyISAM崩潰後發生損壞的概率比InnoDB高很多,而且恢復速度也要慢。

一般來說,

MyISAM適合: InnoDB適合:
(1) 做很多count 的計算
(2) 插入不頻繁,查詢非常頻繁
(3) 沒有事務
(1) 可靠性要求比較高,或者要求事務
(2) 表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

檢視儲存引擎

一般情況下,MySQL會預設提供多種儲存引擎,可以通過下面的檢視:

(1)看你的MySQL現在已提供什麼儲存引擎: mysql> show engines;

(2)看你的MySQL當前預設的儲存引擎: mysql> show variables like '%storage_engine%';

(3)你要看某個表用了什麼引擎(在顯示結果裡引數engine後面的就表示該表當前用的儲存引擎): mysql> show create table 表名;

參考自《高效能MySQL》