程序員經典面試題,為什麼數據庫索引多用B+樹

最近很多小夥伴都參與了面試更換了工作,校招也已經開始了。最近面試了幾個實習生,感覺基礎能力都不大行,數據庫在程序員的面試中佔有舉足輕重的一個作用。今天我們來講一講數據庫的索引是什麼?

索引,就跟我們的書本的目錄一樣,如果一本書沒有目錄,那麼你要找某一個知識點,那自然是相當費勁的。數據庫的索引就是扮演這樣的角色,索引會告訴你對應的數據存放的磁盤地址,就好比目錄上面的頁數。那麼數據庫的“目錄”究竟長什麼樣子呢?

常見的數據庫索引有下面三種類型,第一是哈希表,哈希表相信大家都已經不陌生了,我們可以將數據庫的索引字段後哈希並保存下來。只要哈希算法設計得合理,我們可以非常快地找到對應數據的一個存放地址,然後到對應的存放地址就可以快速地找到數據。那麼,哈希索引有什麼缺點呢?首先是哈希表比較適合在內存中使用,但是如果要落盤,就比較麻煩了,特別是哈希表擴容的時候,磁盤的很多數據都會修改。第二,哈希表沒辦法進行一個區間的篩選。

第二種則是數組索引,與上述的哈希表類似,但又有所不同。與哈希索引類似,數組索引的效率也是非常高的,在一個有序數組裡面去查找元素,我們只要進行二分查找即可。但是數組索引的問題也是非常地明顯,那便是插入非常的麻煩,你插入一個新的元素,就要把後面所有的元素都往後移動一下。所以,數組索引我們一般只有靜態數據才會使用。

有序數組都講了,那麼接下來肯定就是二叉樹了,我們說的二叉樹當然是二叉排序樹,二叉排序樹相對與數組,最大的優點是方便插入。但是同時也存在這麼一個問題,因為索引的數據可能存在磁盤,那麼如果索引的數據超過1000條的時候,就有可能要經過10次才能夠找到最終的數據,而磁盤IO的瓶頸在於尋道跟旋轉,效率必然會降低。所以,我們要儘量地減少在磁盤中尋道跟旋轉的次數,所以多叉樹就被廣泛應用在數據庫索引當中了。而在多叉樹中,最常被使用的,便是B+樹。

程序員經典面試題,為什麼數據庫索引多用B+樹

現在你知道了為什麼數據索引有哪些,以及為什麼B+樹被廣泛應用的道理了吧。歡迎大家關注我,共同學習,共同進步。大家的支持是我繼續嘮嗑的動力。同名公眾號(沙茶敏碎碎念)


分享到:


相關文章: