索引博客推薦及學習筆記(面試必問)

 https://blog.csdn.net/qq_42628989/article/details/106652538 - MySQL性能優化——索引基本原理                                                 https://blog.csdn.net/weixin_33859844/article/details/94061254 -  面試題:MySQL性能調優——索引詳解與索引的優化 沒用         https://blog.csdn.net/dyllove98/article/details/9631303 - Mysql幾種索引類型的區別及適用情況                                                       https://blog.csdn.net/zpf336/article/details/42402387 - 數據庫索引和約束


個人感悟:

索引基本類型:normal 、 unique 、 hash            

索引基本方式:BTree、 Hash、 FullText

約束:primaryKey、unique、default、 notNull等

首先說索引基本方式                                                                                                                                                                           

(1)Hash索引:使用的是hash表的數據結構來建立索引,hash表有什麼好處,因爲hash可以通過公式進行計算放置或插入數據的位置,如果位置被佔用,還會採取當前位置向左向右索引來獲取新的地址。這樣放置的數據不是有序的。所以進行等值操作時(=)。使用hash索引會非常快,因爲他可以通過公式計算快速定位到位置。但是hash表中的數據不是有序的,對於一些範圍操作。如(in,>,  <)時會出現問題,因爲hash表要找到在這個範圍的數據,操作上是行不通的。因爲hash表的查詢或插入是通過公式計算。而hash表是無序的。就算知道範圍的最小值和最大值,也無法獲取其中的區間的數據。儘管也有方法,比如通過遍歷最大值和最小值的中間區域,在hash表一一查找。。。這樣開銷可以說是非常之大。不可取。。。

  (2)   BTree索引:方法使用的是B+樹的數據結構來建立索引,是有序的。所以對於排序的數據有非常好的操作性。這樣範圍查詢知道最小,最大值。就可以快速定位到該區間了。但等於等值查詢,還是不如hash錶快。BTree是通過不斷逐級搜索節點獲得對應位置。而Hash是通過公式計算,自然速度快得多。所以對於等值操作採用hash方式會很多。但BTree用於等值操作也未嘗不可。

(3)FullText索引:Full 豐滿的,Text 文本,指的就是長文本。主要用於模糊搜索。首先如果使用Hash索引方法、和Btree搜索長文本時需要一個字地遍歷文本的字母(在字段中)。而FullText採取的是分詞的方法,比如通過建立一個表把數據庫的該字段的所有長文本在存儲進去的時候進行文字分詞並標記。把分詞的key值和對應索引建立一個詞典。當模糊搜索每個字段時。這個詞典可以通過對比key值,再通過value中的索引表,找到相關的索引(定位到數據庫的各個某行某列某詞中)。這個也用與搜索引擎,搜索引擎一般才用的是模糊搜索,找到相關的文章。。其實就是通過文章題目或內容適應FullText的方法,使用模糊搜索,通過查詢字典錶快速找到相關對應位置。返回文章id及內容。

再說索引基本類型

(1)Hash類型的索引方法是hash方法,無需再說。

(2)unique類型的方法,唯一的。看情況採取Hash方法還是BTree方法。但一般 不採取FullText方法,因爲unique數據是唯一的,一般就是短文本,而可能就是某個詞,或id數字。Fulltext用於長文本搜索。

(3)normal,,所有都可以用吧。

 

索引類型還分聚簇索引和非聚簇索引。

  (1)   聚簇:很明顯就是把數據都放在一起,其實就是把對應的數據表中的行放到該樹數據結構的葉子節點中。

(2)非聚簇:就是把不放入,把葉子節點當做索引,指到相關數據表中的行。。


總結:前天面試問了索引,查閱網上資料。發現還是弄錯了,通過通讀以上博客,再通過用自己的話記錄博客筆記總結,把這個基本概念理解和牢記了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章