MySQL 存儲引擎

簡介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

可經過查看錶的狀態信息得到表所使用的存儲引擎類別服務器

wKioL1NT0iqirX_gAAiPQBmwf9E054.jpg

修改默認存儲引擎架構

# 在配置文件/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的支持等)

相關文章
相關標籤/搜索