標(biāo)簽:順序 刪除 記錄 插入 鍵值 heap mysql 結(jié)構(gòu) mysql中具體的數(shù)據(jù)是存儲(chǔ)在行中的,而行是存儲(chǔ)在頁(yè)中的。也就是說(shuō)頁(yè)是凌駕于行之上的。 mysq一個(gè)頁(yè)大小為16K,當(dāng)然這個(gè)大小是可以通過(guò)修改配置文件來(lái)改變的。 mysql頁(yè)結(jié)構(gòu)大致示意圖:
當(dāng)我們新建一個(gè)表的時(shí)候表中用戶(hù)記錄部分(user records)部分是空的,在我們插入一條記錄后會(huì)被記錄到其中,直到插入滿(mǎn)時(shí)會(huì)把記錄信息刷入到下一個(gè)頁(yè)中,循環(huán)往復(fù)。。。
記錄頭信息大致示意圖:
1.delete_mask:表示改行記錄是否被刪除其實(shí)就是刪除記錄的標(biāo)識(shí)位并占用一個(gè)二進(jìn)制位,其中0--未刪除 1--已刪除 2.heap_no:表示當(dāng)前記錄在該頁(yè)中的位置,除此之外heap_no中還存在兩條虛擬記錄行用于記錄當(dāng)前頁(yè)中最大記錄和最小記錄的主鍵值 3.next_record:表示當(dāng)前記錄的真實(shí)數(shù)據(jù)到下一條記錄的真實(shí)數(shù)據(jù)的地址偏移量,其實(shí)這就是個(gè)單項(xiàng)鏈表,可以通過(guò)一條記錄找到下一條記錄。但值得注意的是下一條記錄并不是我們插入順序的下一條記錄而是按照主鍵值由小到大的順序的下一條記錄。而且規(guī)定最小記錄的下一條記錄就是本頁(yè)中存儲(chǔ)的主鍵值最小的記錄,而本頁(yè)中主鍵值最大的記錄的下一條記錄就是本頁(yè)中的最大記錄 如圖所示:
上圖所示的記錄的順序是順序插入的記錄順序(1.2.3.4),可是我們?cè)趯?shí)際開(kāi)發(fā)中經(jīng)常會(huì)出現(xiàn)非順序插入的情況。如下圖所示:
當(dāng)出現(xiàn)非順序插入的情況,雖然插入順序由(1.2.3.4)變?yōu)榱耍?.2.4.3)但是它的鏈表順序是不會(huì)改變的依舊保持(1.2.3.4)這里需要注意的是圖中heap_no的順序插入和heap_no的非順序插入是不一樣的。 當(dāng)我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中出現(xiàn)表記錄刪除的情況時(shí)上圖中的相應(yīng)記錄信息也會(huì)發(fā)生變化例如:最大記錄行和最小記錄行的變化(可能會(huì)變化)、next_record的變化(參照數(shù)據(jù)結(jié)構(gòu)中單鏈表刪除時(shí)的變化,后繼指針置空操作)、delete_mask的變化(0--未刪除 1--已刪除)、heap_no的變化、n_owned值的變化 標(biāo)簽:順序,刪除,記錄,插入,鍵值,heap,mysql,結(jié)構(gòu) |
|
來(lái)自: 開(kāi)心向北 > 《待分類(lèi)》