面試官常考的MySQL索引(MySQL進階)
你好我是辰兮,很高興你能來閱讀,本篇是整理了索引基礎學習的相關知識點,帶你認識了解索引的數據結構,實現原理,分享獲取新知,希望對你有幫助,一起加油,共同進步。
1.JAVA基礎面試常考問題 : JAVA面試基礎常考題匯集
2.JAVA面試SSM框架常考 :JAVA框架面試題匯集
文章目錄
一、索引定義
二、索引分類
三、索引原理
四、索引數據結構
一、索引定義
MySQL官方定義:索引(Index)是幫助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小時內刪除侵權內容。