標籤:
Mysql作為一個開源的免費資料庫,在平時項目當中會經常使用到,而在項目當中我們的著重點一般在設計使用資料庫上而非mysql本身上,所以在提到mysql的儲存引擎時,一般都不曾知道,這裡經過網上相關文獻的查閱總結下Mysql儲存引擎。
什麼是儲存引擎
在資料庫管理系統中(DBMS),一個資料庫引擎(或者說儲存引擎)是指用來對資料進行增刪改查等操作的一個軟體組件。大多數資料庫管理系統都會提供它們自己的應用介面供使用者與引擎進行互動。這是維基上給的一個解釋,說白了儲存引擎就是資料庫用來對資料進行操作的方法,不同的方法可能有不同的關注點和效果。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表類型(即儲存和操作此表的類型)。
在Oracle 和SQL Server等資料庫中只有一種儲存引擎,所有資料存放區管理機制都是一樣的。而MySql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎。
MySql中的儲存引擎
1. MyISAM:這種引擎是mysql最早提供的。這種引擎又可以分為靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:
- 靜態MyISAM:如果資料表中的各資料列的長度都是預先固定好的,伺服器將自動選擇這種表類型。因為資料表中每一條記錄所佔用的空間都是一樣的,所以這種表存取和更新的效率非常高。當資料受損時,恢複工作也比較容易做。
- 動態MyISAM:如果資料表中出現varchar、xxxtext或xxxBLOB欄位時,伺服器將自動選擇這種表類型。相對於靜態MyISAM,這種表格儲存體空間比較小,但由於每條記錄的長度不一,所以多次修改資料後,資料表中的資料就可能離散的儲存在記憶體中,進而導致執行效率下降。同時,記憶體中也可能會出現很多片段。因此,這種類型的表要經常用optimize table 命令或最佳化工具來進行磁碟重組。
- 壓縮MyISAM:以上說到的兩種類型的表都可以用myisamchk工具壓縮。這種類型的表進一步減小了佔用的儲存,但是這種表壓縮之後不能再被修改。另外,因為是壓縮資料,所以這種表在讀取的時候要先時行解壓縮。
但是,不管是何種MyISAM表,目前它都不支援事務,行級鎖和外鍵約束的功能。
2. MyISAM Merge引擎:這種類型是MyISAM類型的一種變種。合并表是將幾個相同的MyISAM表合并為一個虛表。常應用於日誌和資料倉儲。
3. InnoDB:InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。
4. memory(heap):這種類型的資料表只存在於記憶體中。它使用散列索引,所以資料的存取速度非常快。因為是存在於記憶體中,所以這種類型常應用於暫存資料表中。
5. archive:這種類型只支援select 和 insert語句,而且不支援索引。常應用於日誌記錄和彙總分析方面。
6. CSV: 這種類型的儲存引擎利用冒號分割值的格式將資料存在文字檔上。我們可以利用CSV儲存引擎方便的對遵照CSV格式的資料進行匯入匯出或者與其他軟體進行資料交換
當然MySql支援的表類型不止上面幾種。
如何選擇(儲存引擎之間的優缺點)
Mysql提供了多種多樣的儲存引擎,這些引擎考慮到不同的使用案例而採取了不同的設計側重點。所以為了高效利用這些儲存引擎,我從Mysql官網找來一張幾種儲存引擎優缺點的表格對比,如下:
儲存引擎特徵表格
--reference
Wiki-http://en.wikipedia.org/wiki/Database_engine
Blog-http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html
Mysql-https://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
Mysql儲存引擎比較