1. 程式人生 > >Mysql的儲存引擎介紹

Mysql的儲存引擎介紹

1.前言

mysql> show table status like 'user'  ;
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| user | InnoDB |      10 | Compact    |    2 |           8192 |       16384 |               0 |            0 |         0 |              4 | 2018-10-10 16:13:48 | NULL        | NULL       | utf8_general_ci | NULL     |                |         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
1 row in set

Engine 就是表所對應的儲存引擎。

在檔案系統中,MySQL會把每個資料庫(也叫做架構)儲存為資料目錄下的一個子目錄。當建立一個表時,MySQL會在和表名同名的、以.frm 為字尾的檔案中儲存表的定義。例如,當建立一個名為MyTable的表時,MySQL將在MyTable.frm中儲存相關表定義。因為MySQL使用檔案系統來儲存資料庫名和表定義,大小寫敏感性將依賴於具體的平臺。在Windows平臺上,MySQL的例項(Instance) 名、表名、資料庫名都是大小寫不敏感的;在Unix類平臺上,則是大小寫敏感的。每種儲存引擎對錶資料和索引的儲存方式有所不同,但表定義是由MySQL伺服器獨立處理的。可以通過命令show table status like table來區別。

2.mysql都有哪些引擎

2.1 MyISAM 引擎

作為 MYSQL的預設儲存引擎,在效能和可用特徵之間, MYISAM提供一種良好的平 衡,這些特徵包括全文檢索(Fu- Text Indexing)、壓縮、空間函式(GlS)。 MYISAM不支援事務和行級鎖。

儲存

一般來說, MYISAM將每個表儲存成兩個檔案:資料檔案和索引檔案。兩個檔案的擴充套件 名分別為**.MYD和MYI**。MYISAM的格式是平臺通用的,這意味著使用者可以在不同架構的伺服器上毫無問題地相互拷貝資料檔案和索引檔案。例如,可以從 Intel架構的伺服器上覆制檔案到 Powerpc或 Sun SPARC架構的伺服器。

MYISAM表可以包含動態行( Dynamic Row)和靜態行( Static Row,即固定長度行)。MYSQL會根據表定義決

定選用何種行格式。 MYISAM表的可容納的行總數,一般只受限於資料庫伺服器的可用磁碟空間大小,以及作業系統允許建立的最大檔案大小。

在 MYSQL5.0中,預設配置的含有可變長行定義的 MYISAM表可以支援256TB的資料 處理,並使用6位元組的指標記錄資料。更早的 MYSQL版本預設使用4位元組指標,最大可處理4GB資料。所有的 MYSQL版本都支援最大8位元組的指標。如果想改變 MYISAM表上的指標大小(調高或調低),必須在表建立選項 MAX ROWS和AVG_ROR_ LENGTH中,指定相關的值,這些選項代表了使用者預計使用的表大小。

CREATE TABLE mytable INTEGER NOT NULL PRIMARY KEY,
 b CHAR (18) NOT NULL
) MAX ROWS = 1000000000 AVG ROW LENGTH = 32

在這個例子中,要求 MYSQL為表資料至少準備32GB的資料儲存容量。

MyISAM特性

作為 MYSQL歷史最悠久的儲存引擎, MYISAM的許多特性已被開發出多年,用於滿足使用者的切身需要。

加鎖與併發

MYISAM對整張表進行加鎖,而不是行。讀取程式( Reader)在需要讀取資料時,在 所有表上都可以獲得共享鎖(讀鎖),而寫入程式( Writer)可以獲得排他鎖(寫鎖)。使用者在執行 select 查詢時,可以在同張表內插入新行(也稱之為併發插入)。這是一個非常重要和有用的特徵。

自動修復

MySQL支援對 MYISAM表的自動檢查和自動修復。

手工修復

使用者可以使用 CHECK TABLE mytable和 REPAIR裡 ABLE mytable命令,檢查表中的錯誤,並修復錯誤。當伺服器離線時,也可以使用 myisamchk命令列工具檢查和修復表。

索引特性

在 MYISAM表中,使用者可以基於BLOB或TEXT型別列的前500個字元,建立相關素引 文索引,它可以根據個別單詞,為複雜的搜尋選項建立相關索引。

延遲更新索引( Delayed Key Writes)

使用表建立選項 DELAY KEY_RITE建立的 MYISAM表,在査詢結束後,不會將索引的已改變資料寫入磁碟,而是在記憶體的鍵緩衝區(In- memory Key Buffer)中快取索引改變資料。它只會在清理緩衝區,或者關閉表時,才將索引塊轉儲到磁碟。對於資料經常改變,並且使用頻繁的表,這種模式大大提 高了表的處理效能。不過,如果伺服器或系統崩潰,索引將肯定損壞,並需要修復。使用者可以使用指令碼,如 執行 myisamchk工具,在重啟伺服器前進行修復,也可以用自動恢復( Automatic Recovery)選項進行修復(即使沒有選用DELAY KEY 9RIT選項,這些修復上的安全措施也是很有價值的)。延遲更新索引特性 可以被全域性配置,也可以為個別表單獨配置。

2.2 MyISAM Merge引擎

Merge引擎是MyISAM的變種。合併表(Merge Tabie)是指將幾個相同的MyISAM表合併為一個虛表(Virtual Table)。它對於MySQL記錄日誌或資料倉庫應用特別有用。

2.3 InnoDB 引擎

InnoDB專為事務處理設計的一款儲存引擎,特別是用於處理大量短期(Short-lived)事務, 短期事務是指般能正常完成,不需要回滾的事務。InnoDB 仍然是一種最廣泛應用的事務性儲存引擎。 它的效能水平和崩潰後自動恢復特性,也讓它在非事務性儲存應用中很流行。

InnoDB將所有資料共同儲存在一個或幾個資料檔案中,這種資料檔案-般稱之 為表空間(Tablespace)。 表空間本質上是一種“黑盒”(Black box),在“黑盒”內,InnoDB自我管理-切資料。 在MySQL4.I版及更新版本中,InnoDB也支援將每個表和相關索引儲存為單獨的分離檔案

InnoDB使用MVCC機制獲取高併發效能,並且實現所有四個標準隔離級。它的預設隔離級為REPEATABLE READ,在這個隔離級上,它使用了間隙鎖(Next-key locking)策略防止“幻讀”問題的產生:不僅對查詢中讀取的行進行加鎖,而且還對索引結構中的間隙(Gaps) 進行加鎖,以防止幻影(Phantom) 插人。

InnoDB表是基於聚簇索引建立的。InnoDB 的索引結構,非常不同於其他大多數MySQL儲存引擎,因此,它能提供一種非常快速的主鍵查詢效能。不過,它的輔助索引(Sccondary Index,也就是非主鍵索引)也會包含主鍵列,所以,如果主鍵定義的比較大,其他索引也將很大。如果想在表上定義很多索引,則爭取儘量把主鍵定義得小一些。InnoDB 不會壓縮索引。

直至本書寫作時,InnoDB還不能根據排序(Sorting) 建立索引,而MyISAM支援。因此,當InnoDB載入資料和建立索引時,要比MyISAM慢很多。任何改變InnoDB表結構的操作,會導致整個表的重建,包括重建所有索引。

在最初設計InnoDB時,大多伺服器仍然是低速硬碟、單CPU和有限的記憶體。如今,支援海量記憶體、高速硬碟的多核CPU伺服器已經越來越便宜了。InnoDB也面臨著一些擴 展性問題。

InnoDB的開發人員正著手解決這些問題,不過在本書寫作時,有些問題仍未完全解決。

2.4 其他引擎

Memory引擎,Archive引擎,CSV引擎,Federated引擎,Blackhole引擎,NDB Cluster引擎,Falcon引擎,solidDB引擎,PBXT引擎,Maria引擎