面試官常考的MySQL索引(MySQL進階)

      網友投稿 819 2025-04-10

      你好我是辰兮,很高興你能來閱讀,本篇是整理了索引基礎學習的相關知識點,帶你認識了解索引的數據結構,實現原理,分享獲取新知,希望對你有幫助,一起加油,共同進步。

      1.JAVA基礎面試常考問題 : JAVA面試基礎常考題匯集

      2.JAVA面試SSM框架常考 :JAVA框架面試題匯集

      文章目錄

      一、索引定義

      二、索引分類

      三、索引原理

      四、索引數據結構

      一、索引定義

      MySQL官方定義:索引(Index)是幫助MySQL高效獲取數據的數據結構。

      作用: 可以提高查詢效率。

      面試官常考的MySQL索引(MySQL進階)

      關鍵詞:數據結構 用來提高查詢效率

      二、索引分類

      索引是在存儲引擎中實現的,也就是說不同的存儲引擎,會使用不同的索引。MyISAM和InnoDB存儲引擎:只支持BTREE索引,也就是說默認使用BTREE,不能夠更換。MEMORY/HEAP存儲引擎:支持HASH和BTREE索引。

      mysql的索引我們分為三大類來講

      單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引。

      全文索引可以在varchar、char、text類型的列上創建。可以通過ALTER TABLE或CREATE INDEX命令創建。

      對于大規模的數據集,通過ALTER TABLE(或者CREATE INDEX)命令創建全文索引要比把記錄插入帶有全文索引的空表更快。

      全文索引不支持中文需要借sphinx(coreseek)或迅搜<、code>技術處理中文。

      alter table 表名 add FULLTEXT(字段名);

      三、索引原理

      (1)為什么我們添加完索引后查詢速度會變快?

      ①傳統的查詢方法,是按照表的順序遍歷的,不論查詢幾條數據,

      mysql需要將表的數據從頭到尾遍歷一遍

      ②在我們添加完索引之后,

      mysql一般通過BTREE算法生成一個索引文件,在查詢數據庫時,找到索引文件進行遍歷(折半查找大幅查詢效率),找到相應的鍵從而獲取數據

      (2)索引的代價

      ①創建索引是會產生索引文件的,

      占用磁盤空間

      ②索引文件是一個二叉樹類型的文件,

      可想而知我們的dml(增刪改)操作同樣也會對索引文件進行修改,所以性能會下降

      (3)在哪些column上使用索引?

      ①較頻繁的作為查詢條件的字段應該創建索引

      ②唯一性太差的字段不適合創建索引(例如gender性別字段,盡管頻繁作為查詢條件)

      ③更新非常頻繁的字段不適合作為索引

      ④不會出現在where子句中的字段不該創建索引

      四、索引數據結構

      實際的數據庫系統幾乎沒有使用二叉查找樹或其進化品種紅黑樹(red-black tree)實現的,目前大部分數據庫系統及文件系統都采用B-Tree或其變種B+Tree作為索引結構。

      (1)B-Tree

      B樹(Balance)是一種自平衡的樹,

      能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作,都在對數時間內完成。

      概括來說B樹是一個一般化的二叉查找樹(binary search tree),可以擁有多于2個子節點。B樹為系統大塊數據的讀寫操作做了優化。B樹減少定位記錄時所經歷的中間過程,從而加快存取速度。

      下面是一個B-Tree的數據結構:

      B-Tree是滿足下列條件的數據結構:

      B-Tree的每個節點都是

      【指針+“鍵值對”】

      組成,key和指針互相間隔,節點兩端是指針

      每個非葉子節點由n-1個key和n個指針組成,每個葉子節點最少包含一個key和兩個指針

      每個指針要么為null,要么指向另外一個節點,葉子節點的指針均為null 一個節點中的key從左到右遞減排列

      指針指向的節點的所有key大于指針左邊的key,小于指針右邊的key 所有的葉子節點具有相同的深度,等于樹高h(樹高,就是樹的層數)

      在B-Tree中按key檢索數據的算法:首先從根節點進行二分查找,如果找到則返回對應節點的data,否則對相應區間的指針指向的節點遞歸進行查找,直到找到節點或找到null指針,返回null則表示查找失敗。

      一個度為d的B-Tree,設其索引N個key,則其樹高h的上限為logd((N+1)/2),檢索一個key,其查找節點個數的漸進復雜度為O(logdN)。從這點可以看出,B-Tree是一個非常有效率的索引數據結構。

      【度,用來約束一個節點key和指針的個數,每個非葉子結點由n-1個key和n個指針組成,其中d<=n<=2d,由于key的個數至少為1,所以d>=2】

      (2)B+Tree

      B+Tree是B樹最常見的的一種變種(B-Tree有許多變種),

      MySQL就普遍使用B+Tree實現其索引結構。

      與B-Tree相比,B+Tree有以下不同點:

      B+樹的每個非葉子節點都是由【key+指針】,B樹是【鍵值對+指針】

      B+樹的每個葉子節點只包含鍵值對,B樹的葉子節點【鍵值對+指針】

      B+樹的每個非葉子節點的指針的數量等于key的數量,B樹(指針數量=鍵值對數量+1)

      B+樹的葉子節點包含所有的key

      一般在數據庫系統或文件系統中使用的B+Tree結構都在經典B+Tree的基礎上進行了優化,增加了順序訪問指針。

      在B+Tree的每個葉子節點增加一個指向相鄰葉子節點的指針,就形成了帶有順序訪問指針的B+Tree。做這個優化的目的是為了提高區間訪問的性能,例如圖4中如果要查詢key為從18到49的所有數據記錄,當找到18后,只需順著節點和指針順序遍歷就可以一次性訪問到所有數據節點,極大提到了區間查詢效率。

      MySQL B+Tree索引解析圖

      The best investment is to invest in yourself

      2020.06.12 記錄辰兮的第80篇博客

      MySQL 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何把excel中的背景去掉(excel中的背景怎么去掉)
      下一篇:如何插入視頻(電腦制作ppt如何插視頻)
      相關文章
      亚洲国产精品综合福利专区| 亚洲精品国产品国语在线| 国产亚洲人成网站在线观看| 亚洲欧洲日产国码久在线观看| 亚洲一区二区免费视频| 亚洲一区二区三区高清| 亚洲精品国产精品乱码不99| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产亚洲免费的视频看 | 亚洲美女色在线欧洲美女| 久久亚洲美女精品国产精品| 亚洲人成电影福利在线播放| 一区二区三区亚洲| 亚洲视频中文字幕| 亚洲男女性高爱潮网站| 亚洲国产成人久久| 亚洲国产精品免费观看| 亚洲日本VA午夜在线电影| 亚洲av无码一区二区三区在线播放 | 99亚洲精品高清一二区| 亚洲成人中文字幕| 亚洲精品白色在线发布| 亚洲AV无码专区在线亚| 亚洲熟伦熟女专区hd高清| 亚洲AV无码一区二区三区电影| 春暖花开亚洲性无区一区二区| 国产亚洲综合一区二区三区| 亚洲精品国产自在久久| 国产亚洲精久久久久久无码AV| 亚洲精品无码午夜福利中文字幕| 久久精品国产亚洲AV麻豆王友容| 亚洲最大福利视频网站| 亚洲第一成人在线| 精品无码专区亚洲| 久久亚洲av无码精品浪潮| 亚洲成AV人片在| 亚洲另类精品xxxx人妖| 午夜亚洲WWW湿好爽 | 亚洲综合日韩久久成人AV| 亚洲国产成人私人影院| 亚洲一区二区三区免费观看|