一、MySQL記錄的存儲結(jié)構(gòu):
1、Page的結(jié)構(gòu),如下圖:
1.1 頁頭
記錄頁面的控制信息,共占56字節(jié),包括頁的左右兄弟頁面指針、頁面空間使用情況等。
1.2 虛記錄
最大虛記錄:比頁內(nèi)最大主鍵還大
最小虛記錄:比頁內(nèi)最小主鍵還小
1.3 記錄堆
行記錄存儲區(qū),分為有效記錄和已刪除記錄
1.4 自由空間鏈表
已刪除記錄組成的鏈表
1.5 未分配空間
頁面未使用的存儲空間;
2、Page頁內(nèi)記錄的維護(hù)
2.1 順序保證
邏輯連續(xù),如圖所示:
2.2 插入策略
為了提高內(nèi)存的利用率,減少內(nèi)存碎片化空洞,首先從自由空間鏈表中分配(已刪除的記錄鏈表),如果空間不夠再從未分配空間分配;
2.3 頁內(nèi)查詢
二分查找,首先從物理連續(xù)的solt(0~n)中查找所在的solt位,然后再從page邏輯鏈表中找到所對應(yīng)的記錄;如圖所示;
3、Page頁內(nèi)數(shù)據(jù)特性
3.1 PageSize的固定大小為16KB
3.2 每頁至少兩天記錄,單行最大為8KB
3.3 最多存儲10個大字段
數(shù)據(jù)段最大768 ->(768+20)*10<8K
超出部分存儲在溢出頁
3.4 VARCHAR
1或2個字節(jié)描述字符長度;
實(shí)際內(nèi)容存儲在長度字節(jié)之后;
VARCHAR(255) [一個字節(jié)]+內(nèi)容
VARCHAR(256) [兩個字節(jié)]+內(nèi)容
二、 InnoDB索引原理和優(yōu)化
1、索引的原理分析
1.1 聚簇索引
數(shù)據(jù)存儲在主鍵索引中,數(shù)據(jù)按主鍵順序存儲,如圖所示:
1.2 二級索引
除主鍵索引以外的索引,葉子中存儲主鍵值
一次查詢需要走兩遍查詢
主鍵大小會影響所有索引的大小,如圖所示:
1.3 聯(lián)合索引
Key由多個字段組成,最左匹配原則
一個索引只創(chuàng)建一棵樹按第一列排序
第一列相同按第二列排序
注意 :如果不是按照最左開始查找,無法使用索引,不能跳過中間列,某列使用范圍查詢后面的列不能使用索引。
2、索引的優(yōu)化分析
2.1 存儲空間
索引文件大小是由字段大小、頁內(nèi)節(jié)點(diǎn)數(shù)目、樹的層數(shù)
2.2 主鍵的選擇
自增主鍵,順序?qū)懭?,效率?/p>
隨機(jī)主鍵,結(jié)點(diǎn)分裂、數(shù)據(jù)移動
自增主鍵寫入磁盤利用率高,每次查詢走兩級索引
隨機(jī)主鍵寫入磁盤利用率低,每次查詢走兩級索引
業(yè)務(wù)主鍵:寫入查詢磁盤利用率都高,可以使用一級索引
聯(lián)合主鍵:影響索引大小,不易維護(hù),不建議使用
2.3 聯(lián)合主鍵
按索引區(qū)分度排序,并且覆蓋索引;
2.4 字符串索引
字符是按照字節(jié)對比的,設(shè)置的時候注意控制長度;
不支持開頭的%模糊查詢,只能全表掃描;
-
存儲
+關(guān)注
關(guān)注
13文章
4123瀏覽量
85277 -
MySQL
+關(guān)注
關(guān)注
1文章
789瀏覽量
26283
發(fā)布評論請先 登錄
相關(guān)推薦
評論