本篇主要介紹mysql的儲存引擎,說明主要的幾個儲存引擎的特性及其差別。資料庫儲存引擎是資料庫底層軟體元件,資料庫管理系統使用資料引擎進行建立、查詢、更新和刪除資料操作。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎還可以獲得特定的功能。
mysql 的核心就是儲存引擎,不同儲存引擎支援的特性各不相同。
mysql中的儲存引擎是外掛程式式儲存引擎。
mysql 5.5.5 之後,innodb 作為預設儲存引擎。
mysql中的儲存引擎的控制級別是表級別,我們可以在建表的時候指定表採用的儲存引擎。
mysql 5.7 支援的儲存引擎有 innodb、myisam、memory、merge、archive、federated、csv、blackhole 等。
可以使用show engines語句檢視系統所支援的引擎型別,結果如圖所示。
support 列的值表示某種引擎是否能使用,yes表示可以使用,no表示不能使用,default表示該引擎為當前預設的儲存引擎。
官網對各個儲存引擎特性的說明:
feature
myisam
memory
innodb
archive
ndb事務支援
nono
yesno
yes鎖的粒度
table
table
rowrow
row儲存限制
256tb
ram64tb
none
384eb
mvcc(多版本控制)
nono
yesno
no外來鍵支援
nono
yesno
yes (note 5)
聚簇索引
nono
yesno
nob-tree indexes
yesyes
yesno
no全文檢索支援
yesno
yes (note 6)
nono
地理空間資料型別支援
yesno
yesyes
yes地理空間索引支援
yesno
yes (note 7)
nono
hash indexes
noyes
no (note 8)
noyes
t-tree 索引
nono
nono
yes索引快取
yesn/a
yesno
yes集群支援
nono
nono
yes壓縮資料
yesno
yesyes
no資料快取
non/a
yesno
yes資料加密
yes (note 3)
yes (note 3)
yes (note 4)
yes (note 3)
yes (note 3)
備份和時間點恢復
yesyes
yesyes
yesreplication support (主從支援)
yeslimited (note 9)
yesyes
yesupdate statistics for data dictionary
yesyes
yesyes
yes注意:
根據特性的重要程度和差別情況,對順序進行了一定的調整。
1、innodb儲存引擎
2、myisam儲存引擎
在5.5版本之前,myisam是mysql的預設儲存引擎,該儲存引擎併發性差,不支援事務,所以使用場景比較少,主要特點為:
(1)不支援事務;
(2)不支援外來鍵,如果強行增加外來鍵,不會提示錯誤,只是外來鍵不其作用;
(3)不支援聚簇索引,對資料的查詢快取只會快取索引,不會像innodb一樣快取資料,而且是利用作業系統本身的快取;
(4)預設的鎖粒度為表級鎖,所以併發度很差,加鎖快,鎖衝突較少,所以不太容易發生死鎖;
(5)支援全文索引(mysql5.6之後,innodb儲存引擎也對全文索引做了支援),但是mysql的全文索引基本不會使用,對於全文索引,現在有其他成熟的解決方案,比如:elasticsearch,solr,sphinx等。
(6)資料庫所在主機如果宕機,myisam的資料檔案容易損壞,而且難恢復;
重點:innodb和myisam的對比
3、memory儲存引擎
將資料存在記憶體中,和市場上的redis,memcached等思想類似,為了提高資料的訪問速度,主要特點:
(1)支援的資料型別有限制,比如:不支援text和blob型別,對於字串型別的資料,只支援固定長度的行,varchar會被自動儲存為char型別;
(2)支援的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為memory儲存引擎的瓶頸;
(3)由於資料是存放在記憶體中,所以在伺服器重啟之後,所有資料都會丟失;
(4)查詢的時候,如果有用到臨時表,而且臨時表中有blob,text型別的字段,那麼這個臨時表就會轉化為myisam型別的表,效能會急劇降低;
總的來說,目前主流的mysql使用場景都是採用innodb儲存引擎,這也是為什麼mysql官方在mysql 5.5.5 之後將innodb 作為預設儲存引擎的原因。
1、建表的時候指定儲存引擎
2、設定預設的儲存引擎create table t1 (i int) engine = innodb;
mysql 5.5.5 之後innodb是預設儲存引擎,如果需要修改預設的儲存引擎,可以通過修改my.cnf配置檔案中的default-storage-engine的值。
3、修改表的儲存引擎default_storage_engine=ndbcluster;
本文主要介紹了mysql的儲存引擎以及各儲存引擎的特性。alter table t engine = innodb;
根據各個儲存引擎的特性指出各自適用的使用場景。
核心是:innodb和myisam的區別,面試中的高頻問題。
注意mysql的儲存引擎控制的粒度是表級別的,也就是同乙個資料庫中的不同表可以設定不同的儲存引擎。
Mysql 儲存引擎之 MyISAM儲存引擎
myisam是預設儲存引擎。每個myisam在磁碟上儲存成三個檔案。frm檔案儲存表定義 myd檔案儲存資料 myi檔案儲存索引。要明確表示你想要用乙個myisam 請用engine表選項指出來 create table test myisam id int engine myisam 2 如下是m...
MySQL之儲存引擎
這幾天研習mysql資料庫的儲存引擎,以便能更深層次的掌握mysql這個優秀的資料庫。首先,mysql資料庫獨有的外掛程式式儲存引擎架構使得它有別於其他任何資料庫,其中不同的儲存引擎有著完全不同的功能和效能。mysql表儲存引擎主要有 innodb儲存引擎,myisam儲存引擎,ndb儲存引擎,me...
MySQL之儲存引擎
1.檢視某個資料表的命令 show create table tbl name mysql可以將資料以不同的技術儲存在檔案 記憶體 中,這種技術就稱為儲存引擎。每一種儲存引擎使用不同的儲存機制 索引技巧 鎖定水平,最終提供廣泛且不同的功能。mysql支援的儲存引擎有 myisam 適用於事物的處理不...