MySQL儲存引擎比較

2021-08-25 10:20:24 字數 2426 閱讀 7502

mysql常用的儲存引擎為myisam、innodb、memory、merge,其中innodb提供事務安全表,其他儲存引擎都是非事務安全表。 

myisam是mysql的預設儲存引擎。myisam不支援事務、也不支援外來鍵,但其訪問速度快,對事務完整性沒有要求。

innodb儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是比起myisam儲存引擎,innodb寫的處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。

memory儲存引擎使用存在記憶體中的內容來建立表。 每個memory表只實際對應乙個磁碟檔案。memory型別的表訪問非常得快,因為它的資料是放在記憶體中的,並且預設使用hash索引。但是一旦服務關閉,表中的資料就會丟失掉 。 

merge儲存引擎是一組myisam表的組合,這些myisam表必須結構完全相同。merge表本身沒 有資料,對merge型別的表進行查詢、更新、刪除的操作,就是對內部的myisam表進行的。 

myisam表還支援3中不同的儲存格 式: 

1 靜態表 

2 動態表 

3 壓縮表 

靜態表是預設的儲存格式,靜態表中的字段都是非變長的字段,優點是:儲存非 常迅速,容易快取,出現故障容易恢復;缺點是:占用的空間通常比動態表多。(注意: 在儲存時,列的寬度不足時,用空格補足,當時在訪問的時候並不會得到這些空格) 

動態表的字段是變長的,優點是:占用的空間相對較少,但是頻繁地 更新刪除記錄會產生碎片,需要定期改善效能,並且出現故障的時候恢復相對比較困難。 

壓縮表占用磁碟空間小,每個記錄是被單獨壓縮的,所以只有非 常小的訪問開支。 

mysql支援外來鍵儲存引擎只有innodb,在建立外來鍵的時候,要求附表必須有對應的索引,子表在建立外來鍵的時候也 會自動建立對應的索引。 

innodb儲存方式為兩種:1 使用共享表空間儲存 2 使用多表空間 

memory型別的儲存引擎 主要用於那些內容變化不頻繁的**表,或者作為統計操作的中間結果表,便於高效地堆中間結果進行分析並得到最終的統計結果。對memory儲存引擎的表進 行更新操作要謹慎,因為資料並沒有實際寫入到磁碟中,所以一定要對下次重新啟動服務後如何獲得這些修改後的資料有所考慮。 

merge用 於將一系列等同的myisam表以邏輯方式組合在一起,並作為乙個物件引用它。merge表的優點在於可以突破對單個myisam表大小的限制,通過將不 同的表分布在多個磁碟上,可以有效的改善merge表的訪問效率。 

為了適應各種不同的執行環境,mysql 提供了多種不同的儲存引擎(storage  engine ),在應用程式開發這個層面上,開發者可以根據不同的需求選擇適合的storage  engine 方案,更為靈活的是,你可以根據每張表將要儲存資料的特點,選擇不同的storage  engine,也就是說,在 乙個mysql 數 據庫中,可以混合使用多種不同的storage  engine

首先小瞥一下mysql 的體系結構,在最高抽象層度下,可以用garlan & shaw的分層結構體系來表示(左)

其中應用層為所有rdbms使用者提供使用者介面,邏輯層包括了所有核心功能的實現,物理層則負責將資料儲存在硬體裝置上。

圖中右側更為具體的描述了邏輯層的組成,查詢處理子系統、事務管理子系統、恢復管理子系統和儲存管理子系統共同組成了mysql 的 邏輯層。相信storage  engine 的位置是在storage  management 處,既storage  engine 屬於storage  management 子系統的一部分

為了讓思路更清晰一些,下面給出一幅比較全面的體系結構圖(或更確切的說是流程圖,只是忽略了反饋)

上面三幅圖來自於一篇非官方(不保證百分百的正確)的mysql 體 繫結構的報告,與《high performance mysql 》一書中給出的mysql 大體結構(下圖,基本對應於 logic layer,從第一幅圖右側可以看出mysql  logic layer同樣遵從分層體系結構)還是比較吻合的。

連線上圖中第二層和第三層之間的介面是並不針對任何儲存引擎的單一 api,.大概由20個基本的類似「啟動事務,返回結果集」等函式組成。儲存引擎並不處理sql,相互之間也不通訊,它們的任務只是簡單的響應高層傳來的 請求。

儲存引擎各自的一些特點

上面提到的四種儲存引擎都有各自適用的環境,這取決於它們獨 有的一些特徵。主要體現在效能、事務、併發控制、參照完整性、快取、 故障恢復,備份及回存等幾個方面

目前比較普及的儲存引擎是 myisam和innodb.而myisam又是絕大部分web應用的首選。myisam與innodb的主要的不同點在於效能和事務控制上。

mysql儲存引擎比較

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

MySQL各儲存引擎比較

feature特性 myisam innodb bdb memory archive ndb storage limits儲存限制 no64tb noyes noyes transactions事務支援 commit,rollback,etc.vv locking granularity鎖級別 ta...

mysql 各種儲存引擎效能比較

1 測試環境 cpu 2ghz 記憶體 2gb 區域網 開乙個長連線,構造隨機查詢條件。2 測試結果 資料量 88171條 qps query per second 引擎型別 網域名稱 快取 qps 不快取 qps innodb innodb.abc.com 7125.467573 11.12710...