MySQL引擎簡述

2022-03-16 07:28:38 字數 4461 閱讀 9362

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表示式來選擇和操控資料的時候非常有用。要記住,在用完**之後就刪除**。

merge引擎 

merge引擎型別允許你把許多結構相同的表合併為乙個表。然後可以執行查詢,從多個表返回的結果就像從乙個表返回的結果一樣。每乙個合併的表必須有同樣的表定義。 

merge儲存引擎在下面這種使用場合會最為有用,如果需要把日誌紀錄不停的錄入mysql資料庫,並且每天、每週或者每個月都建立乙個單一的表,而且要製作來自多個表的合計查詢,merge表這時會非常有效。然而,這項功能有侷限性。只能合併myisam表而且必須嚴格遵守相同的表定義的限制。雖然這看起來好像是乙個大問題,但是,如果使用另外一種表型別(例如innodb),這種合併可能就不需要了。 

memory(記憶體)儲存引擎

example引擎實際上是乙個儲存引擎程式設計的例子,能夠用作mysql系統中其它引擎的基礎。example不支援資料插入,對於任何形式的資料庫訪問來說也不是乙個實用的引擎。然而,example是乙個很好的指南,指導你如何開發自己的儲存引擎,因此對於程式設計師來說是乙個有效的引擎。 

bdb儲存引擎

bdb表可能有乙個更大的崩潰倖存機會,並且也具有對事務commit和rollback操作的能力,bdb引擎支援頁級鎖定。 

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 日誌系統 1 redo日誌 基於innodb引擎 redo log通常是物理日誌,記錄的是資料頁的物理修改,而不是某一行或者某幾行的修改,用來恢復提交後的物理資料頁。redo log使用wal write ahead logging 技術,每次提交事務後,都會講儲存引擎中的log buf...

簡述mysql應用 MYSQL使用簡述

您可能感興趣的話題 mssql 一 連線mysql。1 例1 連線到本機上的mysql。首先在開啟dos視窗,然後進入目錄 mysqlbin,再鍵入命令mysql uroot p,回車後提示你輸密碼,如果剛安裝好mysql,超級使用者root是沒有密碼的,故直接回車即可進入到mysql中了,mysq...