MySQL 儲存引擎簡介

2021-06-01 01:21:35 字數 4681 閱讀 8615

今天寫sql的時候偶然間看到示例在建立表的sql語句加了一段「engine=myisam」,一時好奇想看下這個「myisam」是什麼意思,於是在網上搜出了官方文件《mysql 5.1 參考手冊》中對mysql儲存引擎的簡介,摘抄如下:

·myisam:預設的mysql外掛程式式儲存引擎,它是在web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改storage_engine配置變數,能夠方便地更改mysql伺服器的預設儲存引擎。

·innodb:用於事務處理應用程式,具有眾多特性,包括acid事務支援。

·bdb:可替代innodb的事務引擎,支援commit、rollback和其他事務特性。

·memory:將所有資料儲存在ram中,在需要快速查詢引用和其他類似資料的環境下,可提供極快的訪問。

·merge:允許mysql dba或開發人員將一系列等同的myisam表以邏輯方式組合在一起,並作為1個物件引用它們。對於諸如資料倉儲等vldb環境十分適合。

·archive:為大量很少引用的歷史、歸檔、或安全審計資訊的儲存和檢索提供了完美的解決方案。

·federated:能夠將多個分離的mysql伺服器鏈結起來,從多個物理伺服器建立乙個邏輯資料庫。十分適合於分布式環境或資料集市環境。

·cluster/ndb:mysql的簇式資料庫引擎,尤其適合於具有高效能查詢要求的應用程式,這類查詢需求還要求具有最高的正常工作時間和可用性。

·請記住,對於整個伺服器或方案,你並不一定要使用相同的儲存引擎,你可以為方案中的每個表使用不同的儲存引擎,這點很重要。

mysql數 據庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在預設情況下,mysql支援三個引擎:isam、myisam和heap。另外兩種型別innodb和berkley(bdb),也常常可以使用。如果技術高超,還可以使用mysql++ api自己做乙個引擎。下面介紹幾種資料庫引擎:

isam:isam是乙個定義明確且歷經時間考驗的資料**管理方法,它在設計之時就考慮到 資料庫被查詢的次數要遠大於更新的次數。因此,isam執行讀取操作的速度很快,而且不占用大量的記憶體和儲存資源。isam的兩個主要不足之處在於,它不 支援事務處理,也不能夠容錯:如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。如果你正在把isam用在關鍵任務應用程式裡,那就必須經常備份你所有的實 時資料,通過其複製特性,mysql能夠支援這樣的備份應用程式。

myisam:myisam是mysql的isam擴充套件格式和預設的資料庫引擎。除了提供isam裡所沒有的索引和字段管理的大量功能,myisam還使用一種**鎖定的機制,來優化多個併發的讀寫操作,其代價是你需要經常執行optimize table命令,來恢復被更新機制所浪費的空間。myisam還有一些有用的擴充套件,例如用來修復資料庫檔案的myisamchk工具和用來恢復浪費空間的 myisampack工具。myisam強調了快速讀取操作,這可能就是為什麼mysql受到了web開發如此青睞的主要原因:在web開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬主機提供商和internet平台提供商只允許使用myisam格式。myisam格式的乙個重要缺陷就是不能在表損壞後恢復資料。

heap:heap允許只駐留在記憶體裡的臨時**。駐留在記憶體裡讓heap要比isam和myisam都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,heap也不會浪費大量的空間。heap**在你需要使用select表示式來選擇和操控資料的時候非常有用。要記住,在用完**之後就刪除**。

innodb:innodb資料庫引擎都是造就mysql靈活性的技術的直接產品,這項技術就是mysql++ api。在使用mysql的時候,你所面對的每乙個挑戰幾乎都源於isam和myisam資料庫引擎不支援事務處理(transaction process)也不支援外來鍵。儘管要比isam和 myisam引擎慢很多,但是innodb包括了對事務處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者 或者兩者,那你就要被迫使用後兩個引擎中的乙個了。 

mysql 官方對innodb是這樣解釋的:innodb給mysql提供了具有提交、回滾和崩潰恢復能力的事務安全(acid相容)儲存引擎。innodb鎖定在行級並且也在select語句提供乙個oracle風格一致的非鎖定讀,這些特色增加了多使用者部署和效能。沒有在innodb中擴大鎖定的需要,因為在innodb中行級鎖定適合非常小的空間。innodb也支援foreign key強制。在sql查詢中,你可以自由地將innodb型別的表與其它mysql的表的型別混合起來,甚至在同乙個查詢中也可以混合。

innodb是為處理巨大資料量時的最大效能設計,它的cpu效率可能是任何其它基於磁碟的關聯式資料庫引擎所不能匹敵的。

innodb儲存引擎被完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb儲存它的表&索引在乙個表空間中,表空間可以包含數個檔案(或原始磁碟分割槽)。這與myisam表不同,比如在myisam表中每個表被存在分離的檔案中。innodb 表可以是任何尺寸,即使在檔案尺寸被限制為2gb的作業系統上。

innodb預設地被包含在mysql二進位制分發中。windows essentials installer使innodb成為windows上mysql的預設表。

innodb被用來在眾多需要高效能的大型資料庫站點上產生。著名的internet新聞站點slashdot.org執行在innodb上。 mytrix, inc.在innodb上儲存超過1tb的資料,還有一些其它站點在innodb上處理平均每秒800次插入/更新的

一般來說,

myisam適合:

(1)做很多count 的計算;

(2)插入不頻繁,查詢非常頻繁;(3)

沒有事務。innodb適合:

(1)可靠性要求比較高,或者要求事務;

(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

一般情況下,mysql會預設提供多種

儲存引擎,可以通過下面的檢視:

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

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

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

所有的效能測試在:micrisoft window xp sp2 , intel(r) pentinum(r) m processor 1.6oghz 1g 記憶體的電腦上測試。

測試方法:連續提交10個query, 表記錄總數:38萬 , 時間單位 s

引擎型別                    myisam                innodb              效能相差

count                      0.0008357            3.0163                3609

查詢主鍵                   0.005708              0.1574                27.57

查詢非主鍵                  24.01                   80.37                 3.348

更新主鍵                   0.008124             0.8183                 100.7

更新非主鍵                0.004141             0.02625               6.338

插入                         0.004188             0.3694                 88.21

(1)加了索引以後,對於myisam查詢可以加快:4 206.09733倍,對innodb查詢加快510.72921倍,同時對myisam更新速度減慢為原來的1/2,innodb的更新速度減慢為原來的1/30。要看情況決定是否要加索引,比如不查詢的log表,不要做任何的索引。

(2)如果你的資料量是百萬級別的,並且沒有任何的事務處理,那麼用myisam是效能最好的選擇。

(3)innodb表的大小更加的大,用myisam可省很多的硬碟空間。

在我們測試的這個38w的表中,表占用空間的情況如下:

引擎型別                    myisam               innodb

資料                       53,924 kb           58,976 kb

索引                       13,640 kb           21,072 kb

占用總空間              67,564 kb           80,048 kb

另外乙個176w萬記錄的表, 表占用空間的情況如下:

引擎型別                myisam               innordb

資料                   56,166 kb           90,736 kb

索引                   67,103 kb           88,848 kb

占用總空間        123,269 kb         179,584 kb

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

MySQL 儲存引擎簡介

今天寫sql的時候偶然間看到示例在建立表的sql語句加了一段 engine myisam 一時好奇想看下這個 myisam 是什麼意思,於是在網上搜出了官方文件 mysql 5.1 參考手冊 中對mysql儲存引擎的簡介,摘抄如下 myisam 預設的mysql外掛程式式儲存引擎,它是在web 資料...

mysql 儲存引擎簡介

但是,對於使用者和應用程式來說同樣一張表的資料,無論用什麼引擎來儲存,使用者看到的資料都是一樣的。不同的引擎訪問,引擎功能,占用的空間大小,讀取效能等可能有區別。mysql最常用的儲存引擎為 myisam和innodb。具體的體系結構如下 mysql 5.5.5之前預設的儲存引擎是myisam.在新...