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