MySQL數據表存儲引擎類型及特性

數據表類型(存儲引擎)mysql

數據庫引擎用於存儲、處理和保護數據的核心服務,利用數據庫引擎可控制訪問權限並快速處理事務,利用數據庫引擎建立用於聯機事務處理或聯機分析處理數據的關係數據庫,包括建立用於存儲數據的表和用於查看、管理、保護數據安全的數據庫對象(索引、視圖、存儲過程)。算法

常見引擎比對sql

特性 Myisam InnoDB Memory BDB Archive
存儲限制 無限制 64TB 沒有 沒有
事務安全 - 支持 - 支持 -
鎖機制 表鎖 行鎖 表鎖 頁鎖 行鎖
B樹索引 支持 支持 支持 支持 -
哈希索引 - 支持 支持 - -
全文索引 支持 - - - -
集羣索引 - 支持 - - -
數據緩存 - 支持 支持 - -
索引緩存 支持 支持 支持 - -
數據壓縮 支持 - - - 支持
空間使用 N/A 很是低
內存使用
批量插入速度 很是高
外鍵支持 - 支持 - - -

各引擎特色數據庫

  • Myisam

mysql默認存儲引擎,在磁盤上存儲成三個文件.frm(存儲表定義).MYD(MYData存儲數據)。MYI(MYIndex存儲索引);緩存

沒有事務支持,不支持行鎖外鍵,所以當insert、update會鎖定整個表,效率會低一些,MyIASM中存儲了行數,若是表的讀操做遠大於寫且不須要事務,MyISAM優選。安全

索引併發

1.MyISAM引擎索引結構爲B+Tree,其中B+Tree的數據域存儲的爲實際數據地址即索引和實際數據分開即非彙集索引。性能

2.如圖主鍵索引和輔助索引結構一直只不過主鍵索引要求key惟一。指針

3.MyISAM中索引檢索算法首先安裝B+Tree搜索算法搜索索引,若是key存在,則取出data域的值,而後以data域的值爲地址,讀取相應數據記錄。對象

  • Innodb

提供了對數據庫ACID事務支持並實現SQL標準的四種隔離級別,提供行級鎖和外鍵約束。Mysql運行時Innodb會在內存中創建緩衝池用於緩衝數據和索引,該引擎不支持fulltext類型索引且沒有保存表的行數,select count(*) from table 血藥掃全表。

須要事務操做時Innodb首選,鎖力度小,寫操做不會鎖定權標,因此併發高時Innodb引擎效率更高,

相比Myisam寫處理效率差一些會佔用更多的磁盤空間保存數據和索引。

索引

1.Innodb索引採用B+Tree且Innodb索引文件自己就是數據文件即B+Tree的數據域存儲的就是實際的數據如圖Primary Key即彙集索引。這個索引的key就是數據表主鍵,Innodb表自己就是主索引。

2.Innodb輔助索引數據域存儲的是相應的主鍵的值而不是地址,經過輔助索引查找時先找到主鍵再經過主鍵查找數據。因此主鍵不建議過長不然輔助索引會變得很大。

3.Innodb必須有主鍵若是沒有顯示指定Mysql會自動選擇一個惟一標識的數據記錄爲主鍵。

4.彙集索引按主鍵搜索效率十分高效,輔助索引必須檢索兩遍。

5.基於Innodb索引結構能夠解釋爲何不建議使用過長的主鍵,爲何不建議使用非單調(非遞增)的記錄作主鍵,B+Tree索引結構致使使用非單調作主鍵會至關低效。

經常使用命令

  • show engines; 查看當前支持的引擎和默認引擎
  • show table status from mytest; show create table tablename;查看數據表引擎
  • 修改默認引擎 my.ini [mysqld]下增長 default-storage-engine=InnoDB

名詞概念

  • ACID: (Atomicity)原子性,要麼所有執行要麼不執行;(Consistency)一致性,事務的運行不改變數據庫中數據的一致性;(Isolation)獨立性,也稱隔離性兩個以上的食物不會出現交錯執行的狀態;(Durability)持久性,事務執行成功後數據持久保存。
  • BTree 二叉搜索樹

1.全部非葉子幾點最多有兩個子節點(left right)

2.全部節點存儲一個關鍵字

3.非葉子節點左指針指向小於其關鍵字的子樹,右指針指向大於其關鍵字的子樹

二叉樹查找:從跟節點開始查詢關鍵字與節點相等,命中返回。不然查詢關鍵字比節點小,進入左子節點不然進入右節點。若是左或右爲空反饋找不到。若是樹左右節點保持平衡如圖一、3棵樹查詢性能逼近二分查找。樹比二分查找的有點是數據更新時不須要移動大段內存數據如三、4圖數據更新。

通過一系列的更新可能致使圖2的BTree樹,該樹搜索成線性無查詢優點,在實際使用中一般使用平衡二叉樹如圖一、3即「平衡二叉樹」,平衡算法是一種在B樹種插入和刪除節點的策略。

  • B-Tree 多路搜索樹(非二叉樹)

1.任意非葉子節點最多隻有M個子節點且M>2

2.跟節點的子節點數爲[2, M]

3.除跟節點外的非葉子節點的子節點樹爲[M/2, M]

4.每一個節點存放至少M/2-1(取上整)和至多M-1個關鍵字(至少2個關鍵字)

5.非葉子節點的關鍵字個數=指向兒子的指針個數-1

6.非葉子節點的關鍵字:K[1],K[2],…,K[M-1]且K[i]<K[i+1]

7.非葉子幾點的指針:P[1],P[2],…,P[M],其中P[1]指向關鍵字小於K[1]的子樹,P[M]指向管關鍵字大於K[M-1]的子樹,其餘P[i]指向關鍵字屬於(K[i-1], K[i])的子樹

8.全部葉子節點位於同一層

B-Tree查找:從跟節點開始,對節點內的關鍵字(有序)進行二分查找,命中結束。不然進入查詢關鍵字所屬範圍的兒子節點;重複直到空或葉子節點。

因爲限制除根節點外的非葉子節點至少含有M/2個兒子,確保了節點的至少利用率因此B-Tree的性能等價於二分查找,也就沒有B樹平衡的問題。因爲M/2的限制,插入或刪除節點時須要考慮分裂和合並節點。

B-Tree特性:關鍵字集合分佈在整科樹種;任何一個關鍵字出現且只出如今一個節點中;搜索有可能在非葉子節點結束;搜索性能等價於在關鍵字全集內作一次二分查找;自動層次控制;

  • B+Tree B-Tree變體多路搜索樹

1.基本與B-Tree定義相同除如下外

2.非葉子節點的子樹指針與關鍵字個數相同

3.非葉子節點的子樹指針P[i]指向關鍵字值屬於(K[i], K[i+1])的子樹

4.爲全部葉子節點增長一個鏈指針

5.全部關鍵字都在葉子節點出現

B+Tree查找:與B-Tree相同區別B+樹只有達到葉子節點才命中,其性能等價於關鍵字全集作一次二分查找。

B+Tree特性:全部關鍵字都出如今葉子節點鏈表中,鏈表中關鍵字有序;不可能在非葉子節點命中;非葉子節點至關因而葉子節點的索引,葉子節點至關因而存儲關鍵字數據的數據層;更適合文件索引系統;

  • B*Tree B+Tree變體

1.在B+Tree的非跟和非葉子節點增長指向兄弟的指針

B+Tree分裂:當一個節點滿時,分配一個新的節點,將原節點中1/2的數據複製到新節點,最後在父節點中增長新節點指針;B+樹分類隻影響原節點和父節點不影響兄弟節點。

B*Tree分裂:一個節點滿時,若是下一個兄弟節點未滿,將一部分數據移到兄弟幾點中,再在源節點插入關鍵字,最後修改父節點中兄弟節點的關鍵字;若是兄弟節點也滿了,則在源節點與兄弟節點之間增長新節點,並各賦值1/3的數據到新節點,最後在父節點增長新節點的指針。B*Tree分配節點的機率比B+Tree要低,空間使用率高。

各個樹比對

  • 各個樹比對

類型 特色
BTree 每一個節點只存儲一個關鍵字,等於命中,小於左節點,大於右節點
B-Tree 多路搜索樹,每一個節點存儲M/2到M個關鍵字,非葉子節點存儲指向關鍵字範圍的子節點,全部關鍵字在整棵樹中出現,且只出現一次,非葉子節點能夠命中
B+Tree B-Tree基礎上尉葉子節點增長鏈表指針,全部關鍵字都在葉子節點出現,非葉子節點做爲葉子節點的索引,B+Tree葉子節點才命中
B*Tree B+Tree基礎上爲非也本身點也增長鏈表指針,將節點的最低利用率從1/2提升到
相關文章
相關標籤/搜索