數據庫索引


一、首先了解下為毛數據庫必須有主鍵

我們都知道在數據存儲在數據庫中,對於關系型數據庫來說,我們看到的表是【行*列】的格式。那么這些表中的數據是怎么存儲在磁盤上的呢?

如果不設置主鍵,那么按照操作系統中所講,是分頁般的存儲,一行一行的排列下去。

但如果設置了主鍵,則不然。

設置了主鍵以后,數據庫在磁盤中的存儲變成平衡樹的結構,平衡樹就挺多的了,目前了解到的是以B+樹或B樹的形式。

二、進入索引

如果設置了主鍵,變成了平衡樹,那么該表就成了索引,稱之為聚集索引。

熟悉平衡樹的仔仔們都知道,平衡樹的復雜度跟一條一條去遍歷的復雜度之間的差距吧。如果一條條的去遍歷,最壞的情況下是O(n),而平衡樹的復雜度則是,咳咳,log的以樹的分支為底,以結點數為what?來着(數學老師要打我)log+底為樹的分支數,+上面的值記錄的總數。

孰快孰慢一目了然。

三、其他類型的索引

非聚集索引:聚集索引是以整張表,那么非聚集索引則是以某些字段。

                     可以為數據庫中的所有字段建立個索引,生成非聚集索引。如果建立了,則用腳趾頭也知道,多么的耗費存儲空間。於是乎,可以建那么幾個就行。

覆蓋索引:聚集索引是一個平衡樹,而樹中的非葉子節點則是存儲着真實的數據,所以想要通過非聚集索引獲取真實數據的是必須要經歷聚集索引的。從此話中可以看出,想要獲取數據,好像至少是要經歷聚集索引的,那么還經歷what呢?關於什么是覆蓋索引,看下面。

四、通過索引獲取數據的過程

通過非聚集索引查詢:如果查詢條件是某幾個字段的話,先通過該幾個字段的非聚集索引找到該數據的主鍵,再去聚集索引中通過主鍵來定位到結點的位置,再去葉子節點中找到該主鍵對應的數據。

通過覆蓋索引查詢:上面提到非聚集索引是為想要使用的每個字段建立索引,而覆蓋索引的話,可以為幾個字段建立索引,這樣就成了覆蓋索引。就是通過字段a來查詢,不用獲取其主鍵值再跑到聚集索引中了,而是直接在覆蓋索引中找到葉節點主鍵以后,字段b也在該葉節點中,所以直接獲取即可。

舉例:

create index,birth on user(birthday);

create index,birth_and_name on user(birthday,username)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM