聊聊面試必問的索引
索引是面試中經常會問到的指點,索引到底是什麼呢?
索引
索引其實就是讓無序的資料變得有序,具體來講就是先把建立了索引的資料庫的列的内容進行排序,然後生成倒排的表,這個倒排表中儲存着對應資料的連結位址,這樣查詢的時候,我們先從這個倒排表中查詢,然後再根據倒排表的内容找到對應的具體資料。
聚簇索引與非聚簇索引
對于mysql的聚簇索引和非聚簇索引,他們都是使用B+樹來進行存儲的,聚簇索引是按一定的順序将索引和資料都放在了一起,而非聚簇索引是索引和資料不是在一起存儲的,我們先根據索引找到資料行的位置,然後再找到具體的資料,是以非聚集索引需要二次查詢,效率不高。另外,聚集索引适合範圍查找,因為聚集索引的資料都是有序排列的,而非聚集索引不适合範圍查找。
索引的修改
使用索引在插入或更新主鍵的時候,索引就會被修改,這就可能會産生碎片,如果使用UUID作為主鍵的話,資料存儲就變得稀疏,這可能導緻全表掃描,索引主鍵不建議使用UUID
InnoDb中主鍵作為聚簇索引,如果沒有設定主鍵就用唯一鍵,如果沒有唯一鍵就使用資料庫内部的行隐藏id來當主鍵,輔助索引的葉子節點存儲的是主鍵值,MyIsam是非聚集索引,當涉及到全表掃描等操作的時候,MyIsam比較适合,因為占用空間小。
哈希索引與B+樹索引
Mysql的索引有哈希索引,B+樹索引等,哈希索引的底層是使用哈希表來實作的,當我們進行單條資料查詢的時候适合哈希索引,而範圍查找的時候,哈希索引在存儲的時候原先有序的哈希鍵經過哈希運算後就可能不連續了,這時候就不合适用哈希索引了,哈希索引也不能利用索引排序和模糊查詢,當然最左比對也是不适合的,大多數情況下我們都采用B+數索引
總結
❤️ 感謝大家
- 歡迎關注我❤️,點贊👍🏻,評論🤤,轉發🙏
- 關注
,定期為你推送好文,還有群聊不定期抽獎活動,可以暢所欲言,與大神們一起交流,一起學習。盼盼小課堂
- 有不當之處歡迎批評指正。