日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引

發(fā)布時(shí)間:2024/9/27 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mysql索引實(shí)現(xiàn):

B-tree,B是balance,一般用于數(shù)據(jù)庫(kù)的索引。使用B-tree結(jié)構(gòu)可以顯著減少定位記錄時(shí)所經(jīng)歷的中間過(guò)程,從而加快存取速度。而B(niǎo)+tree是B-tree的一個(gè)變種,MySQL就普遍使用B+tree實(shí)現(xiàn)其索引結(jié)構(gòu)。

一般來(lái)說(shuō),索引本身也很大,不可能全部存儲(chǔ)在內(nèi)存中,因此索引往往以索引文件的形式存儲(chǔ)的磁盤上。這樣的話,索引查找過(guò)程中就要產(chǎn)生磁盤I/O消耗,相對(duì)于內(nèi)存存取,I/O存取的消耗要高幾個(gè)數(shù)量級(jí),所以評(píng)價(jià)一個(gè)數(shù)據(jù)結(jié)構(gòu)作為索引的優(yōu)劣最重要的指標(biāo)就是在查找過(guò)程中磁盤I/O操作次數(shù)的漸進(jìn)復(fù)雜度。換句話說(shuō),索引的結(jié)構(gòu)組織要盡量減少查找過(guò)程中磁盤I/O的存取次數(shù)。

為了達(dá)到這個(gè)目的,磁盤按需讀取,要求每次都會(huì)預(yù)讀的長(zhǎng)度一般為頁(yè)的整數(shù)倍。而且數(shù)據(jù)庫(kù)系統(tǒng)將一個(gè)節(jié)點(diǎn)的大小設(shè)為等于一個(gè)頁(yè),這樣每個(gè)節(jié)點(diǎn)只需要一次I/O就可以完全載入。每次新建節(jié)點(diǎn)時(shí),直接申請(qǐng)一個(gè)頁(yè)的空間,這樣就保證一個(gè)節(jié)點(diǎn)物理上也存儲(chǔ)在一個(gè)頁(yè)里,加之計(jì)算機(jī)存儲(chǔ)分配都是按頁(yè)對(duì)齊的,就實(shí)現(xiàn)了一個(gè)node只需一次I/O。并把B-tree中的m值設(shè)的非常大,就會(huì)讓樹(shù)的高度降低,有利于一次完全載入

B-Way查找樹(shù):

一棵樹(shù)的每個(gè)節(jié)點(diǎn)的度小于等于m。

每個(gè)節(jié)點(diǎn)的鍵值數(shù)小于m每個(gè)節(jié)點(diǎn)的度小于等于m鍵值按順序排列子樹(shù)的鍵值要完全小于或大于或介于父節(jié)點(diǎn)之間的鍵值

B-Tree樹(shù):

B-tree又叫平衡多路查找樹(shù)。一棵m階的B-tree (m叉樹(shù))的特性如下:

(其中ceil(x)是一個(gè)取上限的函數(shù))

1) 樹(shù)中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子;

2) 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有有ceil(m / 2)個(gè)孩子;

3) 若根結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則至少有2個(gè)孩子(特殊情況:沒(méi)有孩子的根結(jié)點(diǎn),即根結(jié)點(diǎn)為葉子結(jié)點(diǎn),整棵樹(shù)只有一個(gè)根節(jié)點(diǎn));

4) 所有葉子結(jié)點(diǎn)都出現(xiàn)在同一層,葉子結(jié)點(diǎn)不包含任何關(guān)鍵字信息(可以看做是外部結(jié)點(diǎn)或查詢失敗的結(jié)點(diǎn),實(shí)際上這些結(jié)點(diǎn)不存在,指向這些結(jié)點(diǎn)的指針都為null);

5) 每個(gè)非終端結(jié)點(diǎn)中包含有n個(gè)關(guān)鍵字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:

a) Ki (i=1...n)為關(guān)鍵字,且關(guān)鍵字按順序排序K(i-1)< Ki。

b) Pi為指向子樹(shù)根的接點(diǎn),且指針P(i-1)指向子樹(shù)種所有結(jié)點(diǎn)的關(guān)鍵字均小于Ki,但都大于K(i-1)。

c) 關(guān)鍵字的個(gè)數(shù)n必須滿足: ceil(m / 2)-1 <= n <= m-1。

B+Tree樹(shù):

B+樹(shù)是B-樹(shù)的變體。

有幾點(diǎn)不同的地方:

非葉子結(jié)點(diǎn)的子樹(shù)指針與關(guān)鍵字個(gè)數(shù)相同

為所有葉子結(jié)點(diǎn)增加一個(gè)鏈指針

所有關(guān)鍵字都在葉子結(jié)點(diǎn)出現(xiàn)

二、聚集索引, 非聚集索引

聚集索引:

該索引中鍵值的邏輯順序決定了表中相應(yīng)行的物理順序。

聚集索引確定表中數(shù)據(jù)的物理順序。聚集索引類似于電話簿,后者按姓氏排列數(shù)據(jù)。由于聚集索引規(guī)定數(shù)據(jù)在表中的物理存儲(chǔ)順序,因此一個(gè)表只能包含一個(gè)聚集索引。但該索引可以包含多個(gè)列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。

非聚集索引:

該索引中索引的邏輯順序與磁盤上行的物理存儲(chǔ)順序不同。

索引是通過(guò)二叉樹(shù)的數(shù)據(jù)結(jié)構(gòu)來(lái)描述的,我們可以這么理解聚簇索引:索引的葉節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn)。而非聚簇索引的葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過(guò)有一個(gè)指針指向?qū)?yīng)的數(shù)據(jù)塊。如下圖:

總結(jié)

以上是生活随笔為你收集整理的mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。