一、MySQL記錄的存儲結構:
1、Page的結構,如下圖:
1.1 頁頭
記錄頁面的控制信息,共占56字節(jié),包括頁的左右兄弟頁面指針、頁面空間使用情況等。
1.2 虛記錄
最大虛記錄:比頁內最大主鍵還大
最小虛記錄:比頁內最小主鍵還小
1.3 記錄堆
行記錄存儲區(qū),分為有效記錄和已刪除記錄
1.4 自由空間鏈表
已刪除記錄組成的鏈表
1.5 未分配空間
頁面未使用的存儲空間;
2、Page頁內記錄的維護
2.1 順序保證
邏輯連續(xù),如圖所示:
2.2 插入策略
為了提高內存的利用率,減少內存碎片化空洞,首先從自由空間鏈表中分配(已刪除的記錄鏈表),如果空間不夠再從未分配空間分配;
2.3 頁內查詢
二分查找,首先從物理連續(xù)的solt(0~n)中查找所在的solt位,然后再從page邏輯鏈表中找到所對應的記錄;如圖所示;
3、Page頁內數據特性
3.1 PageSize的固定大小為16KB
3.2 每頁至少兩天記錄,單行最大為8KB
3.3 最多存儲10個大字段
數據段最大768 ->(768+20)*10<8K
超出部分存儲在溢出頁
3.4 VARCHAR
1或2個字節(jié)描述字符長度;
實際內容存儲在長度字節(jié)之后;
VARCHAR(255) [一個字節(jié)]+內容
VARCHAR(256) [兩個字節(jié)]+內容
二、 InnoDB索引原理和優(yōu)化
1、索引的原理分析
1.1 聚簇索引
數據存儲在主鍵索引中,數據按主鍵順序存儲,如圖所示:
1.2 二級索引
除主鍵索引以外的索引,葉子中存儲主鍵值
一次查詢需要走兩遍查詢
主鍵大小會影響所有索引的大小,如圖所示:
1.3 聯合索引
Key由多個字段組成,最左匹配原則
一個索引只創(chuàng)建一棵樹按第一列排序
第一列相同按第二列排序
注意 :如果不是按照最左開始查找,無法使用索引,不能跳過中間列,某列使用范圍查詢后面的列不能使用索引。
2、索引的優(yōu)化分析
2.1 存儲空間
索引文件大小是由字段大小、頁內節(jié)點數目、樹的層數
2.2 主鍵的選擇
自增主鍵,順序寫入,效率高
隨機主鍵,結點分裂、數據移動
自增主鍵寫入磁盤利用率高,每次查詢走兩級索引
隨機主鍵寫入磁盤利用率低,每次查詢走兩級索引
業(yè)務主鍵:寫入查詢磁盤利用率都高,可以使用一級索引
聯合主鍵:影響索引大小,不易維護,不建議使用
2.3 聯合主鍵
按索引區(qū)分度排序,并且覆蓋索引;
2.4 字符串索引
字符是按照字節(jié)對比的,設置的時候注意控制長度;
不支持開頭的%模糊查詢,只能全表掃描;
-
存儲
+關注
關注
13文章
4359瀏覽量
86212 -
MySQL
+關注
關注
1文章
831瀏覽量
26763
發(fā)布評論請先 登錄
相關推薦
深度剖析MySQL/InnoDB的并發(fā)控制和加鎖技術
![深度<b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b>/<b class='flag-5'>InnoDB</b>的并發(fā)控制和加鎖技術](https://file.elecfans.com/web1/M00/CC/A1/o4YBAF-aYeaAB-zxAAD6QstD8vE478.png)
MySQL存儲引擎簡析
關于mysql存儲引擎你知道多少
最有用的mysql問答
![最有用的<b class='flag-5'>mysql</b>問答](https://file.elecfans.com/web1/M00/C9/63/pIYBAF90UiWAFqGjAAEGqlFzJyE897.png)
MySQL存儲引擎完成更新語句執(zhí)行的方法
![<b class='flag-5'>MySQL</b><b class='flag-5'>存儲</b>引擎完成更新語句執(zhí)行的方法](https://file.elecfans.com/web1/M00/CB/A5/pIYBAF-PnrWAWKEQAAAUECXJiWo336.png)
MySQL中的redo log是什么
MySQL5.6 InnoDB支持全文檢索
剖析MySQL InnoDB存儲原理(下)
![<b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b><b class='flag-5'>存儲</b>原理(下)](https://file.elecfans.com/web2/M00/91/85/pYYBAGPsjJ6AXoh7AAPJ8IY1v5c177.jpg)
評論