前言
在mysql5.5之後,支援的儲存引擎有十幾個,但是常用的就那麼幾種,而且預設支援的也是innodb,既然要進行乙個對比,我們就要從不同的維度來看一下。
我們可以使用命令來看看當前資料庫可以支援的儲存引擎有哪些。
使用這個儲存引擎,每個myisam在磁碟上儲存成三個檔案。
(1)frm檔案:儲存表的定義資料
(2)myd檔案:存放表具體記錄的資料
(3)myi檔案:儲存索引
frm和myi可以存放在不同的目錄下。myi檔案用來儲存索引,但僅儲存記錄所在頁的指標,索引的結構是b+樹結構。下面這張圖就是myi檔案儲存的機制:
從這張圖可以發現,這個儲存引擎通過myi的b+樹結構來查詢記錄頁,再根據記錄頁查詢記錄。並且支援全文索引、b樹索引和資料壓縮。
支援資料的型別也有三種:
(1)靜態固定長度表
這種方式的優點在於儲存速度非常快,容易發生快取,而且表發生損壞後也容易修復。缺點是佔空間。這也是預設的儲存格式。
(2)動態可變長表
優點是節省空間,但是一旦出錯恢復起來比較麻煩。
(3)壓縮表
上面說到支援資料壓縮,說明肯定也支援這個格式。在資料檔案發生錯誤時候,可以使用check table工具來檢查,而且還可以使用repair table工具來恢復。
有乙個重要的特點那就是不支援事務,但是這也意味著他的儲存速度更快,如果你的讀寫操作允許有錯誤資料的話,只是追求速度,可以選擇這個儲存引擎。
2、innodb
innodb是預設的資料庫儲存引擎,他的主要特點有:
(1)可以通過自動增長列,方法是auto_increment。
(2)支援事務。預設的事務隔離級別為可重複度,通過mvcc(併發版本控制)來實現的。
(3)使用的鎖粒度為行級鎖,可以支援更高的併發;
(4)支援外來鍵約束;外來鍵約束其實降低了表的查詢速度,但是增加了表之間的耦合度。
(6)在innodb中存在著緩衝管理,通過緩衝池,將索引和資料全部快取起來,加快查詢的速度;
(7)對於innodb型別的表,其資料的物理組織形式是聚簇表。所有的資料按照主鍵來組織。資料和索引放在一塊,都位於b+數的葉子節點上;
當然innodb的儲存表和索引也有下面兩種形式:
(1)使用共享表空間儲存:所有的表和索引存放在同乙個表空間中。
對於innodb來說,最大的特點在於支援事務。但是這是以損失效率來換取的。
3、memory
將資料存在記憶體,為了提高資料的訪問速度,每乙個表實際上和乙個磁碟檔案關聯。檔案是frm。
(1)支援的資料型別有限制,比如:不支援text和blob型別,對於字串型別的資料,只支援固定長度的行,varchar會被自動儲存為char型別;
(2)支援的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為memory儲存引擎的瓶頸;
(3)由於資料是存放在記憶體中,一旦伺服器出現故障,資料都會丟失;
(4)查詢的時候,如果有用到臨時表,而且臨時表中有blob,text型別的字段,那麼這個臨時表就會轉化為myisam型別的表,效能會急劇降低;
(5)預設使用hash索引。
(6)如果乙個內部表很大,會轉化為磁碟表。
在這裡只是給出3個常見的儲存引擎。使用哪一種引擎需要靈活選擇,乙個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能
mysql的儲存引擎有 mysql儲存引擎有哪些?
儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...
mysql儲存引擎 mysql儲存引擎簡介
精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...
mysql個儲存引擎 MySQL儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...