數(shù)據(jù)庫(kù)索引—210511

一、數(shù)據(jù)庫(kù)索引

1.1遏弱、背景

數(shù)據(jù)庫(kù)索引使用樹形存儲(chǔ)結(jié)構(gòu)盆均,主要是樹的查詢效率高,而且可以保持有序漱逸。二叉樹的查詢速度和查詢次數(shù)都是最小的泪姨,但是磁盤IO次數(shù)過(guò)大。

1.2饰抒、索引的查詢過(guò)程

數(shù)據(jù)庫(kù)索引是存儲(chǔ)在磁盤上的肮砾,當(dāng)數(shù)據(jù)量大的時(shí)候,索引的大小可能有幾個(gè)G袋坑。當(dāng)我們利用索引查詢的時(shí)候仗处,不會(huì)把整個(gè)索引全部加載到內(nèi)存中,只能逐一加載每一個(gè)磁盤頁(yè)枣宫,這里的磁盤頁(yè)對(duì)應(yīng)著索引樹的節(jié)點(diǎn)甥啄。

二山叮、B-樹

2.1孝冒、定義

B-樹是一種多路平衡查詢樹碳却,它的每一個(gè)節(jié)點(diǎn)最多包含m個(gè)孩子,m被稱為B樹的階翅娶。m的大小取決于索引頁(yè)的大小文留。

2.2好唯、特征

  • 1.根結(jié)點(diǎn)至少有兩個(gè)子女。
  • 2.每個(gè)中間節(jié)點(diǎn)都包含k-1個(gè)元素和k個(gè)孩子燥翅,其中 m/2 <= k <= m
  • 3.每一個(gè)葉子節(jié)點(diǎn)都包含k-1個(gè)元素渠啊,其中 m/2 <= k <= m
  • 4.所有的葉子結(jié)點(diǎn)都位于同一層。
  • 5.每個(gè)節(jié)點(diǎn)中的元素從小到大排列权旷,節(jié)點(diǎn)當(dāng)中k-1個(gè)元素正好是k個(gè)孩子包含的元素的值域分劃替蛉。

2.3、查詢性能

相較于二叉樹拄氯,查詢次數(shù)更多躲查,但是IO次數(shù)減少,多的只是內(nèi)存交互译柏,可以忽略镣煮。

2.4、應(yīng)用

文件系統(tǒng)以及部分?jǐn)?shù)據(jù)庫(kù)索引鄙麦,如非關(guān)系型數(shù)據(jù)庫(kù)MongoDB典唇。

漫畫:什么是B-樹?

三胯府、B+樹

3.1介衔、定義

B+樹是B-樹的一種變體,有著比B-樹更高的查詢性能骂因。

3.2炎咖、特征

  • 1.有k個(gè)子樹的中間節(jié)點(diǎn)包含有k個(gè)元素(B樹中是k-1個(gè)元素),每個(gè)元素不保存數(shù)據(jù)寒波,只用來(lái)索引乘盼,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)。
  • 2.所有的葉子結(jié)點(diǎn)中包含了全部元素的信息俄烁,及指向含這些元素記錄的指針绸栅,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。
  • 3.所有的中間節(jié)點(diǎn)元素都同時(shí)存在于子節(jié)點(diǎn)页屠,在子節(jié)點(diǎn)元素中是最大(或最写饪琛)元素。
  • 4.始終保持最大元素在跟節(jié)點(diǎn)當(dāng)中卷中。

3.3矛双、衛(wèi)星數(shù)據(jù)

所謂衛(wèi)星數(shù)據(jù)渊抽,指的是索引元素所指向的數(shù)據(jù)記錄蟆豫,比如數(shù)據(jù)庫(kù)中的某一行

  • 在B-樹種懒闷,中間節(jié)點(diǎn)和葉子節(jié)點(diǎn)都帶有衛(wèi)星數(shù)據(jù)十减。
  • 而在B+樹中栈幸,只有葉子節(jié)點(diǎn)帶有衛(wèi)星數(shù)據(jù),中間節(jié)點(diǎn)只是索引帮辟,沒(méi)有任何數(shù)據(jù)關(guān)聯(lián)速址。

3.4、聚集索引

在數(shù)據(jù)庫(kù)的聚集索引(Clustered Index)中由驹,葉子節(jié)點(diǎn)直接包含衛(wèi)星數(shù)據(jù)芍锚。在非聚集索引(NonClustered Index)中,葉子節(jié)點(diǎn)帶有指向衛(wèi)星數(shù)據(jù)的指針蔓榄。

3.5并炮、與B-樹相比優(yōu)勢(shì)

  • 單一節(jié)點(diǎn)存儲(chǔ)更多的元素:IO次數(shù)更少;
  • 所有查詢都要查找到葉子節(jié)點(diǎn):查詢性能穩(wěn)定甥郑;
  • 所有葉子節(jié)點(diǎn)形成有序鏈表:范圍查詢簡(jiǎn)單逃魄。
    詳解
  • B+樹中,中間節(jié)點(diǎn)沒(méi)有衛(wèi)星數(shù)據(jù)澜搅,所以同樣大小的磁盤頁(yè)可以容納更多的元素伍俘。這就意味著,數(shù)據(jù)量相同的情況下勉躺,B+樹更矮胖癌瘾,查詢的時(shí)候IO次數(shù)更少。
  • B+樹查詢的時(shí)候饵溅,必須要找到葉子節(jié)點(diǎn)柳弄,二B-樹則只要匹配到元素即可,無(wú)論是中間節(jié)點(diǎn)還是葉子節(jié)點(diǎn)概说。因此B-樹查詢性能不穩(wěn)定碧注,B+樹則是穩(wěn)定的。
  • 范圍查找的實(shí)現(xiàn)邏輯不一樣糖赔。B-樹是依靠遍歷萍丐,而B+樹只需要在鏈表上做遍歷即可

3.6、應(yīng)用

MySQL數(shù)據(jù)庫(kù)索引放典。

漫畫:什么是B+樹逝变?

四、Mysql EXPLAIN

4.1奋构、EXPLAIN 后type 索引掃描的方式有幾種壳影?

system > const > eq_ref > ref > range > index > ALL
一般來(lái)說(shuō),得保證查詢至少達(dá)到range級(jí)別弥臼,最好能達(dá)到ref

4.2宴咧、主鍵查詢是const

EXPLAIN SELECT * from hl_info where id = 62678;

4.3、主鍵范圍查詢是range

EXPLAIN SELECT * from hl_info where id in(77,88);

4.4径缅、索引查詢r(jià)ef

EXPLAIN SELECT * from hl_info where out_id = '888889059181' and source = 2;

4.5掺栅、沒(méi)用到索引是ALL或者index

-- out_id是varchar類型烙肺,這里用數(shù)字不會(huì)用到索引
-- type 索引掃描的方式(這里用到的是index)
EXPLAIN SELECT * from hl_info where out_id = 888889059181 and source = 2;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氧卧,隨后出現(xiàn)的幾起案子桃笙,更是在濱河造成了極大的恐慌,老刑警劉巖沙绝,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搏明,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡闪檬,警方通過(guò)查閱死者的電腦和手機(jī)熏瞄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谬以,“玉大人强饮,你說(shuō)我怎么就攤上這事∥瑁” “怎么了邮丰?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铭乾。 經(jīng)常有香客問(wèn)我剪廉,道長(zhǎng),這世上最難降的妖魔是什么炕檩? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任斗蒋,我火速辦了婚禮,結(jié)果婚禮上笛质,老公的妹妹穿的比我還像新娘泉沾。我一直安慰自己,他們只是感情好妇押,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布跷究。 她就那樣靜靜地躺著,像睡著了一般敲霍。 火紅的嫁衣襯著肌膚如雪俊马。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天肩杈,我揣著相機(jī)與錄音柴我,去河邊找鬼。 笑死扩然,一個(gè)胖子當(dāng)著我的面吹牛艘儒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼彤悔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了索守?” 一聲冷哼從身側(cè)響起晕窑,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卵佛,沒(méi)想到半個(gè)月后杨赤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截汪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年疾牲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衙解。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳柔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚓峦,到底是詐尸還是另有隱情舌剂,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布暑椰,位于F島的核電站霍转,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏一汽。R本人自食惡果不足惜避消,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望召夹。 院中可真熱鬧岩喷,春花似錦、人聲如沸监憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枫虏。三九已至妇穴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隶债,已是汗流浹背腾它。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留死讹,地道東北人瞒滴。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妓忍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虏两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容