mysql資料庫的體系架構如下圖所示:
從上圖中可以看出,mysql主要分為以下幾個元件:
連線池元件
管理服務和工具元件
sql介面元件
分析器元件
優化器元件
緩衝元件
外掛程式式儲存引擎
物理檔案
一、儲存引擎
儲存引擎 : 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查詢資料等技術實現的方法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表型別(即儲存和操作此表的型別)
了解:在oracle 和sql server等資料庫中只有一種儲存引擎,所有資料儲存管理機制都是一樣的。而mysql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎
下表顯示了各種儲存引擎的特性:
mysql儲存引擎比較
特性myisaminnodbmemoryarchivendb
儲存限制
沒有64tb有沒有
沒有事務
支援支援
鎖粒度錶行表
行頁b樹索引
支援支援
支援支援
雜湊索引
支援支援
全文索引
支援集群索引
支援資料快取
支援支援
索引快取
支援支援
支援資料壓縮
支援支援
批量插入
高相對低
高非常高
高記憶體消耗低高
中低低外來鍵支援
支援複製支援
支援支援
支援支援
支援查詢快取
支援支援
支援支援
支援備份恢復
支援支援
支援支援
支援集群支援
支援其中最常見的兩種儲存引擎是myisam 和 innodb
myisam儲存引擎
1、myisam 是mysql (mysql 5.5版本以前) 原來的預設儲存引擎.
2、myisam 這種儲存引擎不支援事務,不支援行級鎖,只支援併發插入的表鎖。
3、myisam 型別的表支援三種不同的儲存結構:靜態型、動態型、壓縮型。
(1)靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的資料型別),這樣mysql就會自動使用靜態myisam格式。
使用靜態格式的表的效能比較高,因為在維護和訪問的時候以預定格式儲存資料時需要的開銷很低。但是這高效能是用空間換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,佔據了整個空間。
(2)動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等資料型別),這時myisam就自動使用動態型,雖然動態型的表占用了比靜態型表較少的空間,但帶來了效能的降低.
(3)壓縮型:如果在這個資料庫中建立的是在整個生命週期內唯讀的表,則這種情況就是用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
補充3點:
1.大容量的資料集時趨向於選擇innodb。因為它支援事務處理和故障的恢復。innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在innodb也是比較快的。
2.大批量的插入語句時(這裡是insert語句)在myiasm引擎中執行的比較的快,但是update語句在innodb下執行的會比較的快,尤其是在併發量大的時候。
3.兩種引擎所使用的索引資料結構是什麼?
答案:都是b+樹!
myiasm引擎,b+樹的資料結構中儲存的內容實際上是實際資料的位址值。也就是說它的索引和實際資料是分開的,只不過使用索引指向了實際資料。這種索引的模式被稱為非聚集索引。
innodb引擎的索引的資料結構也是b+樹,只不過資料結構中儲存的都是實際的資料,這種索引有被稱為聚集索引。
memory 儲存引擎
memory儲存引擎(之前稱為heap)將表中資料存放在記憶體中,如果資料庫重啟或崩潰,資料丟失,因此它非常適合儲存臨時資料。
archive儲存引擎
正如其名稱所示,archive非常適合儲存歸檔資料,如日誌資訊。它只支援insert和select操作,其設計的主要目的是提供高速的插入和壓縮功能。
ndb儲存引擎
ndb儲存引擎是乙個集群儲存引擎,類似於oracle的rac,但它是share nothing(非共享)的架構,因此能提供更高階別的高可用性和可擴充套件性。ndb的特點是資料全部放在記憶體中,因此通過主鍵查詢非常快。
關於ndb,有乙個問題需要注意,它的連線(join)操作是在mysql資料庫層完成,不是在儲存引擎層完成,這意味著,複雜的join操作需要巨大的網路開銷,查詢速度會很慢。
二、測試儲存引擎
建立三個表,分別使用innodb,myisam,memory 儲存引擎,進行插入資料測試
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
#看一下三個儲存引擎建立的 表檔案
t1.frm t1.ibd
t2.myd t2.myi t2.frm
t3.frm
#細心的同學會發現最後的儲存引擎只有表結構,無資料
#memory,在重啟mysql或者重啟機器後,表內資料清空
重點[面試題]:
innodb與myiasm儲存引擎的區別:
1.innodb 是mysql5.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...