新聞中心
數(shù)據(jù)表類型(存儲引擎)

數(shù)據(jù)庫引擎用于存儲、處理和保護數(shù)據(jù)的核心服務,利用數(shù)據(jù)庫引擎可控制訪問權限并快速處理事務,利用數(shù)據(jù)庫引擎創(chuàng)建用于聯(lián)機事務處理或聯(lián)機分析處理數(shù)據(jù)的關系數(shù)據(jù)庫,包括創(chuàng)建用于存儲數(shù)據(jù)的表和用于查看、管理、保護數(shù)據(jù)安全的數(shù)據(jù)庫對象(索引、視圖、存儲過程)。
常見引擎比對
| 特性 | Myisam | InnoDB | Memory | BDB | Archive |
|---|---|---|---|---|---|
| 存儲限制 | ***制 | 64TB | 有 | 沒有 | 沒有 |
| 事務安全 | - | 支持 | - | 支持 | - |
| 鎖機制 | 表鎖 | 行鎖 | 表鎖 | 頁鎖 | 行鎖 |
| B樹索引 | 支持 | 支持 | 支持 | 支持 | - |
| 哈希索引 | - | 支持 | 支持 | - | - |
| 全文索引 | 支持 | - | - | - | - |
| 集群索引 | - | 支持 | - | - | - |
| 數(shù)據(jù)緩存 | - | 支持 | 支持 | - | - |
| 索引緩存 | 支持 | 支持 | 支持 | - | - |
| 數(shù)據(jù)壓縮 | 支持 | - | - | - | 支持 |
| 空間使用 | 低 | 高 | N/A | 低 | 非常低 |
| 內(nèi)存使用 | 低 | 高 | 中 | 低 | 低 |
| 批量插入速度 | 高 | 低 | 高 | 高 | 非常高 |
| 外鍵支持 | - | 支持 | - | - | - |
各引擎特點
- Myisam
mysql默認存儲引擎,在磁盤上存儲成三個文件.frm(存儲表定義).MYD(MYData存儲數(shù)據(jù))。MYI(MYIndex存儲索引);
沒有事務支持,不支持行鎖外鍵,因此當insert、update會鎖定整個表,效率會低一些,MyIASM中存儲了行數(shù),如果表的讀操作遠大于寫且不需要事務,MyISAM優(yōu)選。
索引
1.MyISAM引擎索引結構為B+Tree,其中B+Tree的數(shù)據(jù)域存儲的為實際數(shù)據(jù)地址即索引和實際數(shù)據(jù)分開即非聚集索引。
2.如圖主鍵索引和輔助索引結構一直只不過主鍵索引要求key唯一。
3.MyISAM中索引檢索算法首先安裝B+Tree搜索算法搜索索引,如果key存在,則取出data域的值,然后以data域的值為地址,讀取相應數(shù)據(jù)記錄。
- Innodb
提供了對數(shù)據(jù)庫ACID事務支持并實現(xiàn)SQL標準的四種隔離級別,提供行級鎖和外鍵約束。Mysql運行時Innodb會在內(nèi)存中建立緩沖池用于緩沖數(shù)據(jù)和索引,該引擎不支持fulltext類型索引且沒有保存表的行數(shù),select count(*) from table 血藥掃全表。
需要事務操作時Innodb***,鎖力度小,寫操作不會鎖定權標,所以并發(fā)高時Innodb引擎效率更高,
相比Myisam寫處理效率差一些會占用更多的磁盤空間保存數(shù)據(jù)和索引。
索引
1.Innodb索引采用B+Tree且Innodb索引文件本身就是數(shù)據(jù)文件即B+Tree的數(shù)據(jù)域存儲的就是實際的數(shù)據(jù)如圖Primary Key即聚集索引。這個索引的key就是數(shù)據(jù)表主鍵,Innodb表本身就是主索引。
2.Innodb輔助索引數(shù)據(jù)域存儲的是相應的主鍵的值而不是地址,通過輔助索引查找時先找到主鍵再通過主鍵查找數(shù)據(jù)。所以主鍵不建議過長否則輔助索引會變得很大。
3.Innodb必須有主鍵如果沒有顯示指定Mysql會自動選擇一個唯一標識的數(shù)據(jù)記錄為主鍵。
4.聚集索引按主鍵搜索效率十分高效,輔助索引必須檢索兩遍。
5.基于Innodb索引結構可以解釋為什么不建議使用過長的主鍵,為什么不建議使用非單調(diào)(非遞增)的記錄做主鍵,B+Tree索引結構導致使用非單調(diào)做主鍵會相當?shù)托А?/p>
常用命令
- show engines; 查看當前支持的引擎和默認引擎
- show table status from mytest; show create table tablename;查看數(shù)據(jù)表引擎
- 修改默認引擎 my.ini [mysqld]下增加 default-storage-engine=InnoDB
名詞概念
- ACID: (Atomicity)原子性,要么全部執(zhí)行要么不執(zhí)行;(Consistency)一致性,事務的運行不改變數(shù)據(jù)庫中數(shù)據(jù)的一致性;(Isolation)獨立性,也稱隔離性兩個以上的食物不會出現(xiàn)交錯執(zhí)行的狀態(tài);(Durability)持久性,事務執(zhí)行成功后數(shù)據(jù)持久保存。
- BTree 二叉搜索樹
1.所有非葉子幾點最多有兩個子節(jié)點(left right)
2.所有節(jié)點存儲一個關鍵字
3.非葉子節(jié)點左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹
二叉樹查找:從跟節(jié)點開始查詢關鍵字與節(jié)點相等,***返回。否則查詢關鍵字比節(jié)點小,進入左子節(jié)點否則進入右節(jié)點。如果左或右為空反饋找不到。如果樹左右節(jié)點保持平衡如圖1、3棵樹查詢性能逼近二分查找。樹比二分查找的有點是數(shù)據(jù)更新時不需要移動大段內(nèi)存數(shù)據(jù)如3、4圖數(shù)據(jù)更新。
經(jīng)過一系列的更新可能導致圖2的BTree樹,該樹搜索成線性無查詢優(yōu)勢,在實際使用中通常使用平衡二叉樹如圖1、3即“平衡二叉樹”,平衡算法是一種在B樹種插入和刪除節(jié)點的策略。
- B-Tree 多路搜索樹(非二叉樹)
1.任意非葉子節(jié)點最多只有M個子節(jié)點且M>2
2.跟節(jié)點的子節(jié)點數(shù)為[2, M]
3.除跟節(jié)點外的非葉子節(jié)點的子節(jié)點樹為[M/2, M]
4.每個節(jié)點存放至少M/2-1(取上整)和至多M-1個關鍵字(至少2個關鍵字)
5.非葉子節(jié)點的關鍵字個數(shù)=指向兒子的指針個數(shù)-1
6.非葉子節(jié)點的關鍵字:K[1],K[2],…,K[M-1]且K[i] 7.非葉子幾點的指針:P[1],P[2],…,P[M],其中P[1]指向關鍵字小于K[1]的子樹,P[M]指向管關鍵字大于K[M-1]的子樹,其他P[i]指向關鍵字屬于(K[i-1], K[i])的子樹 8.所有葉子節(jié)點位于同一層 B-Tree查找:從跟節(jié)點開始,對節(jié)點內(nèi)的關鍵字(有序)進行二分查找,***結束。否則進入查詢關鍵字所屬范圍的兒子節(jié)點;重復直到空或葉子節(jié)點。 由于限制除根節(jié)點外的非葉子節(jié)點至少含有M/2個兒子,確保了節(jié)點的至少利用率所以B-Tree的性能等價于二分查找,也就沒有B樹平衡的問題。由于M/2的限制,插入或刪除節(jié)點時需要考慮分裂和合并節(jié)點。 B-Tree特性:關鍵字集合分布在整科樹種;任何一個關鍵字出現(xiàn)且只出現(xiàn)在一個節(jié)點中;搜索有可能在非葉子節(jié)點結束;搜索性能等價于在關鍵字全集內(nèi)做一次二分查找;自動層次控制; 1.基本與B-Tree定義相同除以下外 2.非葉子節(jié)點的子樹指針與關鍵字個數(shù)相同 3.非葉子節(jié)點的子樹指針P[i]指向關鍵字值屬于(K[i], K[i+1])的子樹 4.為所有葉子節(jié)點增加一個鏈指針 5.所有關鍵字都在葉子節(jié)點出現(xiàn) B+Tree查找:與B-Tree相同區(qū)別B+樹只有達到葉子節(jié)點才***,其性能等價于關鍵字全集做一次二分查找。 B+Tree特性:所有關鍵字都出現(xiàn)在葉子節(jié)點鏈表中,鏈表中關鍵字有序;不可能在非葉子節(jié)點***;非葉子節(jié)點相當于是葉子節(jié)點的索引,葉子節(jié)點相當于是存儲關鍵字數(shù)據(jù)的數(shù)據(jù)層;更適合文件索引系統(tǒng); 1.在B+Tree的非跟和非葉子節(jié)點增加指向兄弟的指針 B+Tree分裂:當一個節(jié)點滿時,分配一個新的節(jié)點,將原節(jié)點中1/2的數(shù)據(jù)復制到新節(jié)點,***在父節(jié)點中增加新節(jié)點指針;B+樹分類只影響原節(jié)點和父節(jié)點不影響兄弟節(jié)點。 B*Tree分裂:一個節(jié)點滿時,如果下一個兄弟節(jié)點未滿,將一部分數(shù)據(jù)移到兄弟幾點中,再在源節(jié)點插入關鍵字,***修改父節(jié)點中兄弟節(jié)點的關鍵字;如果兄弟節(jié)點也滿了,則在源節(jié)點與兄弟節(jié)點之間增加新節(jié)點,并各賦值1/3的數(shù)據(jù)到新節(jié)點,***在父節(jié)點增加新節(jié)點的指針。B*Tree分配節(jié)點的概率比B+Tree要低,空間使用率高。 各個樹比對 各個樹比對
類型
特點
BTree
每個節(jié)點只存儲一個關鍵字,等于***,小于左節(jié)點,大于右節(jié)點
B-Tree
多路搜索樹,每個節(jié)點存儲M/2到M個關鍵字,非葉子節(jié)點存儲指向關鍵字范圍的子節(jié)點,所有關鍵字在整棵樹中出現(xiàn),且只出現(xiàn)一次,非葉子節(jié)點可以***
B+Tree
B-Tree基礎上尉葉子節(jié)點增加鏈表指針,所有關鍵字都在葉子節(jié)點出現(xiàn),非葉子節(jié)點作為葉子節(jié)點的索引,B+Tree葉子節(jié)點才***
B*Tree
B+Tree基礎上為非也自己點也增加鏈表指針,將節(jié)點的***利用率從1/2提高到2/3
分享標題:MySQL數(shù)據(jù)表存儲引擎類型及特性
網(wǎng)頁網(wǎng)址:http://m.5511xx.com/article/cdpgdph.html


咨詢
建站咨詢
