Mysql存儲引擎特色

- 有多種可選方案,可插拔,可修改存儲引擎
- 基於表選擇使用何種存儲引擎
爲表選擇存儲引擎:
mysql>create table test (a int) engine = innodb;
查看有多少種存儲引擎:
更改表的存儲引擎:
mysql>alter table tbl engine = innodb;
主要存儲引擎
innodb存儲引擎
- 索引組織表
- 支持事務
- 支持行級鎖
- 數據塊緩存
- 日誌持久化(事務日誌持久化使得數據恢復迅速)
- 穩定可靠,性能好,線上請儘可能使用innodb;
主鍵:primary key(a)
自增:auto_increment
此時,就算不給a 值或者null ,a依然能賦值正確;
對於使用auto_increment的列必須是索引
mysql中只有innodb支持外鍵約束;且在建立外鍵的時候,要求父表必須有對應的索引,子表在建立外鍵的時候也會自動建立對應的索引;
MyISAM
- 堆表
- 不支持事務
- 只維護索引緩存池,表數據緩存交給操做系統
- 鎖粒度較大(寫併發性差)
- 數據文件能夠直接拷貝,偶爾可能會使用
- 不建議線上業務數據使用
每一個myisam在磁盤上存成3個文件:
.frm (存儲表定義)
MYD(存儲數據)
MYI (存儲索引)
頻繁地更新刪除記錄會產生 碎片,須要按期執行:
OPTIMIZE TABLE;
myisam,鎖粒度很是大,同時只能一個在寫鎖;併發性能會差不少;
myisam 表數據能夠直接從一個數據庫拷貝到另外一個數據庫;
MEMORY存儲引擎
- 數據全內存存放,沒法持久化
- 性能較高
- 不支持事務
- 適合偶爾做爲臨時表使用
- create temporary table tmp(id int ) engine = memory;
建立臨時表:
mysql> create temporary table tmp(id int ) engine = memory;
臨時表,只在每一鏈接中生效;
BLACKHOLE存儲引擎
- 數據不做任何存儲
- 利用mysql replicate,充當日誌服務器
- 在mysql replicate 環境中充當代理主
TokuDB
- 分形樹存儲結構
- 支持事務
- 行鎖
- 壓縮效率較高
- 適合大批量insert的場景
Mysql Cluster
- 多主分佈式集羣
- 數據節點間冗餘,高可用
- 支持事務
- 設計上易於擴展
- 面向將來,線上慎用
總結
- mysql存儲引擎可插拔,可修改,基於表;
- innodb:索引表,支持事務,行鎖,數據庫緩存,日誌持久化,穩定性能好
- myisam: 堆表,不支持事務,表鎖,只維護索引緩衝池表數據緩存交給操做系統;
- memory:建立零時表
- blackhole:充當日誌服務器,
- TokuDB:樹型存儲結構,支持事務,行鎖,壓縮效率高,適合大批量insert場景;