mysql存儲引擎概述

 
Mysql存儲引擎特色

  • 有多種可選方案,可插拔,可修改存儲引擎
  • 基於表選擇使用何種存儲引擎
 
爲表選擇存儲引擎:
mysql>create table test (a int) engine = innodb;

 

查看有多少種存儲引擎:
mysql>show engines

 

更改表的存儲引擎:
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場景;
相關文章
相關標籤/搜索