mysql個儲存引擎 MySQL儲存引擎

2021-10-17 18:02:02 字數 2715 閱讀 2224

mysql資料庫的體系架構如下圖所示:

從上圖中可以看出,mysql主要分為以下幾個元件:

連線池元件

管理服務和工具元件

sql介面元件

分析器元件

優化器元件

緩衝元件

外掛程式式儲存引擎

物理檔案

儲存引擎:其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新、查詢資料等技術實現的方法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表型別(即儲存和操作此表的型別)。

在oracle和sql server等資料庫中只有一種儲存引擎,所有資料儲存管理機制都是一樣的。而mysql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎。

下面來看看各種儲存引擎的比較:

其中最常見的兩種儲存引擎是myisam和innodb

myisam儲存引擎

1.myisam是mysql(mysql 5.5版本以前)原來的預設儲存引擎;

2.myisam儲存引擎不支援事務,不支援行級鎖,只支援併發插入的表鎖;

3.myisam型別的表支援三種不同的儲存結構:靜態型、動態型、壓縮型;

靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的資料型別),

這樣mysql就會自動使用靜態myisam格式;

使用靜態格式的表的效能比較高,因為在維護和訪問的時候以預定格式儲存資料時需要的開

銷很低。但是這高效能是用空間換來的,因為在定義的時候是固定的,所以不管列中的值有

多大,都會以最大值為準,佔據了整個空間。

動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等資料型別),這時myisam

就自動使用動態型,雖然動態型的表占用了比靜態型表較少的空間,但帶來了效能的降低。

壓縮型:如果在這個資料庫中建立的是在整個生命週期內唯讀的表,則這種情況就是用myisam的壓

縮型表來減少空間的占用。

4.myisam也是使用b+tree索引但是和innodb的在具體實現上有些不同。

innodb儲存引擎

1.mysql預設儲存引擎(mysql 5.5 版本後);

2.innodb 支援事務,回滾以及系統崩潰修復能力和多版本迸發控制的事務的安全;

3.innodb 支援自增長列(auto_increment),自增長列的值不能為空,(乙個表只允許存在乙個自增,並且要求自增列必須為索引);

4.innodb 支援外來鍵(foreign key),外來鍵所在的表稱為子表,而所依賴的表稱為父表;

5.innodb儲存引擎支援行級鎖;

6.innodb儲存引擎索引使用的是b+tree。

補充三點:

①大容量的資料集時趨向於選擇innodb,因為它支援事務處理和故障的恢復。innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在innodb也是比較快的。

②大批量的插入語句時(這裡是insert語句)在myiasm引擎中執行的比較的快,但是update語句在innodb下執行的會比較的快,尤其是在併發量大的時候。

③兩種引擎所使用的索引資料結構是什麼?

答案:都是 b+tree

myiasm引擎,b+tree的資料結構中儲存的內容實際上是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。

innodb引擎的索引的資料結構也是b+tree,只不過資料結構中儲存的都是實際的資料,這種索引被稱為聚集索引。

memory儲存引擎

memory儲存引擎(之前稱為heap)將表中資料存放在記憶體中,如果資料庫重啟或崩潰,資料丟失,因此它非常適合儲存臨時資料。

archive儲存引擎

正如其名稱所示,archive非常適合儲存歸檔資料,如日誌資訊。它只支援 insert 和 select 操作,其設計的主要目的是提供高速的插入和壓縮功能。

ndb儲存引擎

ndb儲存引擎是乙個集群儲存引擎,類似於oracle的rac,但它是share nothing(非共享)的架構,因此能提供更高階別的高可用性和可擴充套件性。ndb的特點是資料全部放在記憶體中,因此通過主鍵查詢非常快。

關於ndb,有乙個問題需要注意,它的連線 join 操作是在mysql資料庫層完成,不是在儲存引擎層完成,這意味著,複雜的join操作需要巨大的網路開銷,查詢速度會很慢。

重點:面試題

innodb與myiasm儲存引擎的區別:

1.innodb 是mysql 5.5版本 以後的預設儲存引擎,而myisam是 5.5版本 以前的預設儲存引擎;

2.innodb 支援事物,而myisam不支援事物;

3.innodb 支援行級鎖,而 myiasm 它支援的是併發的表級鎖;

4.innodb 支援外來鍵,而myiasm 不支援外來鍵;

5.innodb 與 myiasm 儲存引擎都採用 b+tree 儲存資料,但是innodb的索引與資料儲存在乙個檔案中,這種方式我們稱之為聚合索引。而myiasm則會單獨建立乙個索引檔案,也就是說,資料與索引是分離開的;

6.在效率方面 myisam 比 innodb 高,但是在效能方面 innodb 要好一點。

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

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

mysql儲存引擎模式 mysql儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...

mysql 儲存引擎 唯讀 MySQL儲存引擎

1.儲存引擎 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 1.1.myisam mysql 5.5之前預設的儲存引擎 myisam 儲存引擎由myd...