国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu)

這篇具有很好參考價(jià)值的文章主要介紹了MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、為什么使用索引:

索引是存儲(chǔ)引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本教課書(shū)的目錄部分,通過(guò)目錄中找到對(duì)應(yīng)文章的頁(yè)碼,便可快速定位到需要的文章。MySQL中也是一樣的道理,進(jìn)行數(shù)據(jù)査找時(shí),首先查看查詢(xún)條件是否命中某條索引,符合則通過(guò)索引査找相關(guān)數(shù)據(jù),如果不符合則需要全表掃描,即需要一條一條地查找記錄,直到找到與條件符合的記錄。

二、索引及其優(yōu)缺點(diǎn):

1.索引概述:索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。索引是數(shù)據(jù)結(jié)構(gòu),可以簡(jiǎn)單地理解為排好序的快速查找數(shù)據(jù)結(jié)構(gòu)。滿(mǎn)足特定查找算法,這些數(shù)據(jù)結(jié)構(gòu)以某種方式指向數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)高級(jí)查找算法。索引是在存儲(chǔ)引擎中實(shí)現(xiàn)的,因此每種存儲(chǔ)引擎的索引不一定完全相同,并且每種存儲(chǔ)引擎不一定支持所有索引類(lèi)型。同時(shí)存儲(chǔ)引擎可以定義每個(gè)表的最大索引數(shù)和最大索引長(zhǎng)度。

2.使用索引的優(yōu)點(diǎn):

(1)提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫(kù)的IO成本

(2)通過(guò)創(chuàng)建唯一索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性.

(3)在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面,可以加速表和表之間的連接。換句話說(shuō)對(duì)于有依賴(lài)關(guān)系的子表和父表聯(lián)合查詢(xún)時(shí),可以提高查詢(xún)速度。

(4)在使用分組和排序子句進(jìn)行數(shù)據(jù)查詢(xún)時(shí),可以顯著減少查詢(xún)中分組和排序的時(shí)間,降低了CPU的消耗.

3.使用索引的缺點(diǎn):

(1)創(chuàng)建索引和維護(hù)索引要 耗費(fèi)時(shí)間 ,并且隨著數(shù)據(jù)量的增加,所耗費(fèi)的時(shí)間也會(huì)增加。

(2)索引需要占磁盤(pán)空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,存儲(chǔ)在磁盤(pán)上如果有大量的索引,索引文件就可能比數(shù)據(jù)文件更快達(dá)到最大文件尺寸。

(3)雖然索引大大提高了查詢(xún)速度,同時(shí)卻會(huì) 降低更新表的速度。當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)地維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。

三、Innodb中的索引方案:

1.迭代一次:目錄項(xiàng)記錄的頁(yè)

目錄項(xiàng)其實(shí)和用戶(hù)記錄差不多,只不過(guò)目錄項(xiàng)中的兩個(gè)列是主鍵和頁(yè)號(hào)。可以將表示目錄項(xiàng)的記錄稱(chēng)為目錄項(xiàng)記錄??梢允褂糜涗涱^信息里的record_type(0:普通的用戶(hù)記錄;1:目錄項(xiàng)記錄;2:最小記錄;3:最大記錄)區(qū)分用戶(hù)記錄和目錄項(xiàng)記錄。

MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu),MySQL學(xué)習(xí),學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu)

目錄項(xiàng)記錄和用戶(hù)記錄的不同點(diǎn):

(1)目錄項(xiàng)記錄的record_type值是1,而普通用戶(hù)記錄的record_type值為0

(2)目錄項(xiàng)記錄只有主鍵值和頁(yè)的編號(hào)兩個(gè)列,而普通的用戶(hù)記錄的列是用戶(hù)自己定義的,可能包含很多對(duì)。另外還有InnoDB自己添加的隱藏列。

目錄項(xiàng)記錄和用戶(hù)記錄的相同點(diǎn):

(1)兩者用的是一樣的數(shù)據(jù)頁(yè),都會(huì)為主鍵生成Page Directory,從而在按照主鍵值進(jìn)行查找時(shí)可以使用二分法來(lái)加快查詢(xún)速度。

2.迭代2次:多個(gè)目錄項(xiàng)記錄的頁(yè)

MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu),MySQL學(xué)習(xí),學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu)

?3.迭代3次:目錄項(xiàng)記錄頁(yè)的目錄頁(yè)

MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu),MySQL學(xué)習(xí),學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu)

?4.B+Tree:

MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu),MySQL學(xué)習(xí),學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu)

5.常見(jiàn)索引概念:

(1)聚簇索引:聚簇索引并不是一類(lèi)單獨(dú)的索引類(lèi)型,而是一種數(shù)據(jù)存儲(chǔ)方式(所有的用戶(hù)記錄都存儲(chǔ)在葉子節(jié)點(diǎn)),也就是所謂的索引即數(shù)據(jù),數(shù)據(jù)即索引。

特點(diǎn):

a.使用記錄主鍵值的大小記錄和頁(yè)的排序:頁(yè)內(nèi)的記錄是按照主鍵的大小順序排成一個(gè)單向鏈表;各個(gè)存放用戶(hù)記錄的值也是根據(jù)頁(yè)中用戶(hù)記錄的主鍵大小順序排成一個(gè)雙向鏈表;存放目錄項(xiàng)記錄的頁(yè)分為不同的層次,在同一層次中的頁(yè)也是根據(jù)頁(yè)中目錄記錄項(xiàng)的主鍵大小順序排成一個(gè)雙向鏈表;

b.B+數(shù)的葉子節(jié)點(diǎn)存儲(chǔ)的是完整的用戶(hù)記錄,包括隱藏列

優(yōu)點(diǎn):

a.數(shù)據(jù)訪問(wèn)更快,因?yàn)榫鄞厮饕龑⑺饕蛿?shù)據(jù)保存在同一個(gè)B+樹(shù)中,因此從聚簇索引中獲取數(shù)據(jù)比非聚簇索引更快;

b.聚簇索引對(duì)于主鍵的排序查找和范圍查找速度非常快

c.按照聚簇索引排列的順序,查詢(xún)一定范圍數(shù)據(jù)的時(shí)候,由于數(shù)據(jù)都是緊密相連的,數(shù)據(jù)庫(kù)不用從多個(gè)數(shù)據(jù)塊中提取數(shù)據(jù),所以可以節(jié)省大量的IO操作。

缺點(diǎn):

a.MyISAM不支持聚簇索引,只有InnoDB支持

b.每個(gè)MySQL的表只能有一個(gè)聚簇索引,一般情況下就是該表的主鍵

c.innodb表的主鍵列盡量選用有序的順序id

d.如果沒(méi)有定義主鍵,innodb會(huì)選擇非空的唯一索引代替,如果沒(méi)有這樣的索引,會(huì)隱式的定義一個(gè)主鍵來(lái)作為聚簇索引

(2)二級(jí)索引(輔助索引,非聚簇索引)

以非主鍵的列為查找條件,可以在該列上添加索引,此時(shí)的索引被稱(chēng)為二級(jí)索引

此時(shí)使用記錄c2列的大小進(jìn)行記錄和頁(yè)的排序:

a.頁(yè)內(nèi)記錄是按照c2列的大小順序排成一個(gè)單向鏈表

b.各個(gè)存放用戶(hù)記錄的頁(yè)也是根據(jù)頁(yè)中記錄的c2列的大小順序排成一個(gè)雙向鏈表

c.存放目錄項(xiàng)記錄的頁(yè)分為不同的層次,在同一層次中的頁(yè)也是根據(jù)頁(yè)中的目錄項(xiàng)記錄的c2列大小順序拍成一個(gè)雙向鏈表

B+樹(shù)的葉子節(jié)點(diǎn)此時(shí)存儲(chǔ)的并不是完整的用戶(hù)記錄,而是c2列和主鍵這兩個(gè)列的值

目錄項(xiàng)記錄中不再是主鍵和頁(yè)號(hào)的搭配,而變成c2列和頁(yè)號(hào)的搭配

當(dāng)按照c2列的值查找到完整的用戶(hù)記錄的話,仍然需要到聚簇索引中再查一遍,這個(gè)過(guò)程叫做回表。

聚簇索引和非聚簇索引的區(qū)別:

a.聚簇索引的葉子節(jié)點(diǎn)存儲(chǔ)的是數(shù)據(jù)記錄,非聚簇索引的葉子節(jié)點(diǎn)存儲(chǔ)的是數(shù)據(jù)位置,非聚簇索引不會(huì)影響數(shù)據(jù)表的物理存儲(chǔ)順序

b.一個(gè)表只能有一個(gè)聚簇索引,因?yàn)橹荒苡幸环N排序存儲(chǔ)的方式,但可以有多個(gè)非聚簇索引,也就是多個(gè)索引目錄提供數(shù)據(jù)檢索

c.使用聚簇索引的時(shí)候,數(shù)據(jù)的查詢(xún)效率高,但如果對(duì)數(shù)據(jù)進(jìn)行插入、刪除和更新等操作效率比非聚簇索引低。

(3)聯(lián)合索引

可以以多個(gè)列的大小作為排序規(guī)則,同時(shí)為多個(gè)列建立索引。

每條目錄項(xiàng)記錄都由c2,c3和頁(yè)號(hào)三個(gè)部分組成,各條記錄先按照c2列的值進(jìn)行排序,如果記錄的c2列相同,則按照c3列的值排序。

B+樹(shù)的葉子節(jié)點(diǎn)處的值由c2,c3和主鍵列組成。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833231.html

到了這里,關(guān)于MySQL學(xué)習(xí)Day19——索引的數(shù)據(jù)結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu)

    數(shù)據(jù)庫(kù)索引的功能就是讓查找更加的高效,所以索引的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是能夠加速查找的數(shù)據(jù)結(jié)構(gòu)。 MySQL的innoDB存儲(chǔ)引擎的索引的數(shù)據(jù)結(jié)構(gòu)就是多叉搜索樹(shù)中的b+樹(shù),這可以說(shuō)是為索引量身定做的一個(gè)數(shù)據(jù)結(jié)構(gòu)。 首先,索引可以通過(guò)主鍵,unique修飾創(chuàng)建,也可以直接使用sql語(yǔ)句

    2024年02月10日
    瀏覽(31)
  • Mysql——索引相關(guān)的數(shù)據(jù)結(jié)構(gòu)

    Mysql——索引相關(guān)的數(shù)據(jù)結(jié)構(gòu)

    我們知道,數(shù)據(jù)庫(kù)查詢(xún)是數(shù)據(jù)庫(kù)的最主要功能之一。我們都希望查詢(xún)數(shù)據(jù)的速度能盡可能的快,因此數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)者會(huì)從查詢(xún)算法的角度進(jìn)行優(yōu)化。最基本的查詢(xún)算法當(dāng)然是順序查找(linear search),這種復(fù)雜度為O(n)的算法在數(shù)據(jù)量很大時(shí)顯然是糟糕的,好在計(jì)算機(jī)科學(xué)

    2024年01月16日
    瀏覽(26)
  • MySQL-06.索引的數(shù)據(jù)結(jié)構(gòu)

    MySQL-06.索引的數(shù)據(jù)結(jié)構(gòu)

    索引是存儲(chǔ)引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本書(shū)的目錄部分,通過(guò)目錄中找到對(duì)應(yīng)文章的頁(yè)碼,便可快速定位到需要的文章。MySQL中的索引也是一樣的道理,進(jìn)行數(shù)據(jù)查找時(shí),首先查看查詢(xún)條件是否命中某條索引,符合則 通過(guò)索引查找 相關(guān)數(shù)據(jù),如果不

    2024年04月22日
    瀏覽(17)
  • 索引的數(shù)據(jù)結(jié)構(gòu)(MySql高級(jí))

    索引的數(shù)據(jù)結(jié)構(gòu)(MySql高級(jí))

    索引是存儲(chǔ)引擎用于快速找到數(shù)據(jù)記錄的一種數(shù)據(jù)結(jié)構(gòu),就好比一本教科書(shū)的目錄部分,通過(guò)目錄中找到對(duì)應(yīng)文章的頁(yè)碼,便可快速定位到需要的文章. MySQL中也是一樣的道理,進(jìn)行數(shù)據(jù)查找時(shí),首先查看查詢(xún)條件是否命中某條索引,符合則通過(guò)索引查找相關(guān)數(shù)據(jù),如果不符合

    2024年01月18日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu):Mysql索引原理(通俗易懂)

    數(shù)據(jù)結(jié)構(gòu):Mysql索引原理(通俗易懂)

    在工作中如果經(jīng)常寫(xiě)業(yè)務(wù)代碼,說(shuō)白了就是CURD,比如做一個(gè)查詢(xún)功能,我們會(huì)將前端參數(shù)傳遞到后端后拼接SQL查詢(xún)數(shù)據(jù),那為了提高用戶(hù)體驗(yàn),查詢(xún)速度肯定是越快越好,這就要求我們能夠?qū)QL調(diào)優(yōu),讓查詢(xún)速度更快。 由于數(shù)據(jù)需要持久化,且數(shù)據(jù)量龐大,所以只能將數(shù)據(jù)

    2024年02月11日
    瀏覽(22)
  • 【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二)

    【Mysql】索引數(shù)據(jù)結(jié)構(gòu)深入研究(二)

    前言 在這里需要明確的一點(diǎn)是, 數(shù)據(jù)庫(kù)的引擎InnoDB或者是MyISAM引擎它們是形容數(shù)據(jù)表的,不是形容數(shù)據(jù)庫(kù)的。 另外:文章中提到的索引的數(shù)據(jù)結(jié)構(gòu)暫且都默認(rèn)使用B+Tree InnoDB引擎 InnoDB的索引數(shù)據(jù)文件有兩個(gè),tableName.frm和tableName.ibd文件。 frm文件:表結(jié)構(gòu)相關(guān)信息 ibd文件:所

    2024年02月12日
    瀏覽(26)
  • mysql索引的數(shù)據(jù)結(jié)構(gòu)(Innodb)

    mysql索引的數(shù)據(jù)結(jié)構(gòu)(Innodb)

    首選要注意,這里的數(shù)據(jù)結(jié)構(gòu)是存儲(chǔ)在硬盤(pán)上的數(shù)據(jù)結(jié)構(gòu),不是內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),要重點(diǎn)考慮io次數(shù). 一.不適合的數(shù)據(jù)結(jié)構(gòu): 1.Hash:不適合進(jìn)行范圍查詢(xún)和模糊匹配查詢(xún).(有些數(shù)據(jù)庫(kù)索引會(huì)使用Hash,但是只能精準(zhǔn)匹配) 2.紅黑樹(shù):可以范圍查詢(xún)和模糊匹配,但是和硬盤(pán)io次數(shù)比較多. 二

    2024年02月10日
    瀏覽(21)
  • 【MySQL數(shù)據(jù)庫(kù) | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    【MySQL數(shù)據(jù)庫(kù) | 第十七篇】索引以及索引結(jié)構(gòu)介紹

    目錄 前言: 索引簡(jiǎn)介:? 索引結(jié)構(gòu): ? ? ? ? ??二叉樹(shù)索引結(jié)構(gòu) ? ? ? ??Tree(普通二叉樹(shù)) ? ? ? ??B-Tree(多路平衡查找樹(shù)) ? ? ? ??B+Tree ? ? ? ???哈希索引數(shù)據(jù)結(jié)構(gòu) 總結(jié): 在實(shí)際生活中,我們對(duì)SQL語(yǔ)句進(jìn)行優(yōu)化實(shí)際上有很大一部分都是對(duì)索引進(jìn)行優(yōu)化,因此對(duì)索引

    2024年02月09日
    瀏覽(40)
  • MySQL基礎(chǔ)(二十四)索引的數(shù)據(jù)結(jié)構(gòu)

    MySQL基礎(chǔ)(二十四)索引的數(shù)據(jù)結(jié)構(gòu)

    順序查詢(xún)和數(shù)據(jù)使用二叉樹(shù)結(jié)構(gòu)再進(jìn)行查詢(xún),如圖: 2.1 索引概述 MySQL官方對(duì)索引的定義為: 索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu) 。 **索引的本質(zhì):**索引是數(shù)據(jù)結(jié)構(gòu)。你可以簡(jiǎn)單理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”,滿(mǎn)足特定查找算法。這些數(shù)據(jù)結(jié)構(gòu)以某種方

    2024年02月03日
    瀏覽(40)
  • MySQL的索引使用的數(shù)據(jù)結(jié)構(gòu),事務(wù)知識(shí)

    MySQL的索引使用的數(shù)據(jù)結(jié)構(gòu),事務(wù)知識(shí)

    一、索引的數(shù)據(jù)結(jié)構(gòu) ?? 索引的數(shù)據(jù)結(jié)構(gòu)(非常重要) mysql的索引的數(shù)據(jù)結(jié)構(gòu),并非定式?。。∪Q于MySQL使用哪個(gè)存儲(chǔ)引擎 數(shù)據(jù)庫(kù)這塊組織數(shù)據(jù)使用的數(shù)據(jù)結(jié)構(gòu)是在硬盤(pán)上的。我們平時(shí)寫(xiě)的代碼是存在內(nèi)存里面,內(nèi)存里面的數(shù)據(jù)結(jié)構(gòu),對(duì)于訪問(wèn)操作不敏感,(找數(shù)據(jù)的過(guò)程

    2024年02月10日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包