簡介mysql
MySQL中的數據用各類不一樣的技術存儲在文件(或者內存)中;sql
每一種技術都使用不一樣的存儲機制、索引技巧、鎖定水平而且最終提供普遍的功能和能力;數據庫
這些不一樣的實現數據存儲的技術在MySQL的總體架構中邏輯化爲「存儲引擎層」;緩存
存儲引擎,一般又被稱做「表類型」(便可以在建立表時指定存儲引擎,但沒法對某一數據庫指定存儲引擎)安全
查看bash
show engines; # 顯示可支持的存儲引擎 show table status [{from|in} Db_Name] [like ‘pattern’|where expr]; # 可顯示指定數據庫中指定表的狀態信息 # 法一: show table status like ‘classes’; # 法二: show table status where Name=’classes’\G
可經過查看錶的狀態信息得到表所使用的存儲引擎類別:服務器
修改默認存儲引擎:架構
# 在配置文件/etc/my.cnf中設置以下:
default_storage_engine = InnoDB
各存儲引擎及其特性ide
InnoDB性能
支持事務:事務日誌;日誌文件大小一致:如ib_logfile0和ib_logfile1
支持外鍵
支持MVCC
支持聚簇索引
支持行級鎖:即間隙鎖
支持輔助索引
支持自適應hash索引
支持熱備份
不支持全文索引
MyISAM
支持全文索引 支持壓縮:用於實現數據倉庫,能節約存儲空間並提高性能 支持空間索引 支持表級鎖:若讀寫操做比例爲9:1或8:2,則使用MyISAM能夠提升性能 延遲更新索引:減小IO壓力 不支持事務,外鍵,MVCC,行級鎖等 崩潰後沒法安全恢復數據 適用場景:多讀少寫的數據,較小的表,可以容忍崩潰後的修改操做和數據丟失; 如自帶的mysql數據庫中的表都是使用MyISAM存儲引擎的 # 建議:使用InnoDB存儲引擎,並使用read commited的隔離級別,性能並不比MyISAM性能差,故推薦使用InnoDB存儲引擎
ARCHIVE
僅支持insert和select
支持很好的壓縮功能
不支持事務,不能很好的支持索引
適用於:存儲日誌信息,或其它按時間序列實現的數據採集類的應用,如監控日誌
CSV
1
2
|
將數據存儲爲csv格式,不支持索引
僅適用於數據交換場景
|
BLACKHOLE
1
2
|
沒有存儲機制,任何發往此引擎的數據都會丟棄
因爲其會記錄二進制日誌,故經常使用於多級複製架構中做中轉服務器
|
MEMORY
1
2
3
4
|
數據保存在內存中,便是一個內存表
僅支持
hash
索引,使用表級鎖
不支持blob和text數據類型
經常使用於保存中間數據,如週期性的聚合數據等;也用於實現臨時表
|
MRG_MYISAM
1
2
|
是MyISAM的一個變種,可以將多個MyISAM表合併爲一個虛表
屬於傳統的存儲引擎,通常不經常使用
|
NDB
1
|
是MySQL Cluster中專用的存儲引擎,不經常使用
|
第三方的存儲引擎
XtraDB
加強的InnoDB,由Percona提供;
用法:編譯安裝MySQL時,下載XtraDB的源碼替換MySQL存儲引擎中的InnoDB源碼,並從新編譯安裝MySQL
PBXT
MariaDB自帶此存儲引擎
支持引擎級別的複製,外鍵約束
支持事務,MVCC
對SSD磁盤提供適當支持
TokuDB
使用Fractal Trees索引,性能很強
適用於存儲大數據,擁有很好的壓縮比
已被引入新版本的MariaDB
列式存儲引擎:
Infobright
前身爲Maria,是加強版的MyISAM
支持崩潰後安全恢復
支持數據緩存
其它列式存儲引擎
如 InfiniDB,MonetDB,LucidDB等
開源社區存儲引擎:
Aria
前身爲Maria,是加強版的MyISAM
支持崩潰後安全恢復
支持數據緩存
Groona
全文索引引擎;
Mroonga是基於Groona的二次開發版
OQGraph
由Open Query研發,支持圖結構的存儲引擎
SphinxSE
爲Sphinx全文搜索服務器提供了SQL接口
Spider
能將數據切分紅不一樣的分片,比較高效透明的實現了分片(shard);
支持在分片上支持並行查詢
選擇存儲引擎可參考要素
是否須要事務
備份的類型的支持(熱備或冷備)
崩潰後的恢復
特有的特性(如對SSD的支持等)