資料庫常用的幾種引擎,區別和比較

2021-10-12 16:12:44 字數 3653 閱讀 3203

面試官經常問的基礎問題,就是基於mysql資料庫的這幾種引擎。

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

·innodb:用於事務處理應用程式,具有眾多特性,包括acid事務支援。(提供行級鎖)

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

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

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

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

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

一般來說不使用事務的話,請使用myisam引擎,使用事務的話,一般使用innodb

innodb:支援事務處理,支援外來鍵,支援崩潰修復能力和併發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現併發控制(比如售票),那選擇innodb有很大的優勢。如果需要頻繁的更新、刪除操作的資料庫,也可以選擇innodb,因為支援事務的提交(commit)和回滾(rollback)。

innodb是事務型資料庫的首選引擎,支援事務安全表(acid),支援行鎖定和外來鍵,上圖也看到了,innodb是預設的mysql引擎。innodb主要特性有:

1、innodb給mysql提供了具有提交、回滾和崩潰恢復能力的事物安全(acid相容)儲存引擎。innodb鎖定在行級並且也在select語句中提供乙個類似oracle的非鎖定讀。這些功能增加了多使用者部署和效能。在sql查詢中,可以自由地將innodb型別的表和其他mysql的表型別混合起來,甚至在同乙個查詢中也可以混合

2、innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何其他基於磁碟的關係型資料庫引擎鎖不能匹敵的

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

4、innodb支援外來鍵完整性約束,儲存表中的資料時,每張表的儲存都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵

5、innodb被用在眾多需要高效能的大型資料庫站點上

innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案

**myisam:**插入資料快,空間和記憶體使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇myisam能實現處理高效率。如果應用的完整性、併發性要求比較低,也可以使用。

1、大檔案(達到63位檔案長度)在支援大檔案的檔案系統和作業系統上被支援

2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下乙個塊被刪除,就擴充套件到下一塊自動完成

3、每個myisam表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16

4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,乙個超過1024位元組的鍵將被用上

5、blob和text列可以被索引

6、null被允許在索引的列中,這個值佔每個鍵的0~1個位元組

7、所有數字鍵值以高位元組優先被儲存以允許乙個更高的索引壓縮

8、每個myisam型別的表都有乙個auto_increment的內部列,當insert和update操作的時候該列被更新,同時auto_increment列將被重新整理。所以說,myisam型別表的auto_increment列更新比innodb型別的auto_increment更快

9、可以把資料檔案和索引檔案放在不同目錄

10、每個字元列可以有不同的字符集

11、有varchar的表可以固定或動態記錄長度

12、varchar和char列可以多達64kb

使用myisam引擎建立資料庫,將產生3個檔案。檔案的名字以表名字開始,副檔名之處檔案型別:frm檔案儲存表定義、資料檔案的擴充套件名為.myd(mydata)、索引檔案的副檔名時.myi(myindex)

**memory:**所有的資料都在記憶體中,資料的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對資料的安全性要求較低,可以選擇memoey。它對錶的大小有要求,不能建立太大的表。所以,這類資料庫只使用在相對較小的資料庫表。

memory儲存引擎將表中的資料儲存到記憶體中,未查詢和引用其他表資料提供快速訪問。memory主要特性有:

1、memory表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度

2、memory儲存引擎執行hash和btree縮影

3、可以在乙個memory表中有非唯一鍵值

4、memory表使用乙個固定的記錄長度格式

5、memory不支援blob或text列

6、memory支援auto_increment列和對可包含null值的列的索引

7、memory表在所由客戶端之間共享(就像其他任何非temporary表)

8、memory表記憶體被儲存在記憶體中,記憶體是memory表和伺服器在查詢處理時的空閒中,建立的內部表共享

9、當不再需要memory表的內容時,要釋放被memory表使用的記憶體,應該執行delete from或truncate table,或者刪除整個表(使用drop table)

儲存引擎的選擇

不同的儲存引擎都有各自的特點,以適應不同的需求,如下表所示:

如果要提供提交、回滾、崩潰恢復能力的事物安全(acid相容)能力,並要求實現併發控制,innodb是乙個好的選擇

如果資料表主要用來插入和查詢記錄,則myisam引擎能提供較高的處理效率

如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體中的memory引擎,mysql中使用該引擎作為臨時表,存放查詢的中間結果

如果只有insert和select操作,可以選擇archive,archive支援高併發的插入操作,但是本身不是事務安全的。archive非常適合儲存歸檔資料,如記錄日誌資訊可以使用archive

使用哪一種引擎需要靈活選擇,乙個資料庫中多個表可以使用不同引擎以滿足各種效能和實際需求,使用合適的儲存引擎,將會提高整個資料庫的效能

資料庫常用的幾種引擎,區別和比較

面試官經常問的基礎問題,就是基於mysql資料庫的這幾種引擎。myisam 預設的mysql外掛程式式儲存引擎,它是在web 資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改storage engine配置變數,能夠方便地更改mysql伺服器的預設儲存引擎。innodb 用於事務處理應...

Mysql 資料庫幾種引擎的區別比較

myisam 預設的mysql外掛程式式儲存引擎,它是在web 資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改storage engine配置變數,能夠方便地更改mysql伺服器的預設儲存引擎。innodb 用於事務處理應用程式,具有眾多特性,包括acid事務支援。提供行級鎖 bdb...

Mysql 資料庫幾種引擎的區別比較

myisam 預設的mysql外掛程式式儲存引擎,它是在web 資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改storage engine配置變數,能夠方便地更改mysql伺服器的預設儲存引擎。innodb 用於事務處理應用程式,具有眾多特性,包括acid事務支援。提供行級鎖 bdb...