index-A
是什么
MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。
可以得到索引的本質:索引是數據結構。
索引的目的在于提高查詢效率,可以類比字典,
如果要查“mysql”這個單詞,我們肯定需要定位到m字母,然后從下往下找到y字母,再找到剩下的sql。
如果沒有索引,那么你可能需要a----z,如果我想找到Java開頭的單詞呢?或者Oracle開頭的單詞呢?
是不是覺得如果沒有索引,這個事情根本無法完成?
?
你可以簡單理解為“排好序的快速查找數據結構”。
詳解(重要)
?在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,
這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。下圖就是一種可能的索引方式示例:
左邊是數據表,一共有兩列七條記錄,最左邊的是數據記錄的物理地址
?
為了加快Col2的查找,可以維護一個右邊所示的二叉查找樹,每個節點分別包含索引鍵值和一個指向對應數據記錄物理地址的指針,這樣就可以運用二叉查找在一定的復雜度內獲取到相應數據,從而快速的檢索出符合條件的記錄。
結論
數據本身之外,數據庫還維護著一個滿足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級查找算法,這種數據結構就是索引。
一般來說索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲的磁盤上
我們平常所說的索引,如果沒有特別指明,都是指B樹(多路搜索樹,并不一定是二叉的)結構組織的索引
BTREE
B樹(Balance Tree多路平衡查找樹)
?
總結