面試常問-數據庫索引實現原理


知識內容:

1.數據庫數據儲存

2.數據庫索引實現

 

 

 

一、數據庫數據存儲

1.數據庫中數據存儲形式

數據庫中的數據均是存儲在數據表中,每個數據庫由不同的數據表構成,不同的表存儲着不同的數據,這里以用戶表為例

一個簡單的用戶表結構如下:

 

 

2.數據庫表結構模擬

上述中的用戶表用python語法結構可以簡化為以下結構:

 1 [
 2     {
 3         "id": 1,
 4         "username": wyb,
 5         "password": xxxxxx,
 6 
 7     },
 8     {
 9         "id": 2,
10         "username": woz,
11         "password": xxxxxx,
12 
13     },
14     {
15         "id": 3,
16         "username": alex,
17         "password": xxxxxx,
18 
19     },
20 ]

注:上述代碼中的password字段均為xxxxxx表示密碼為加密后的數據

這樣的結構實現了對數據庫中表結構的模擬,但是這樣的結構也存在一定問題:

它是一個包含了 dict 的 list,我們要查找 id 為 n 的元素, 需要從頭到尾遍歷這個 list 並且比較 id
最壞的情況是 id 為 n 的這個元素根本不存在, 你需要遍歷整個 list 才能得到你想要的結果,這樣就不能非常快速地根據 id 查找到我們想要的元素,於是后來就有了索引技術

 

 

 

二、數據庫索引實現

1.索引介紹

索引定義:索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息

數據庫索引是用於提高數據庫表的數據訪問速度的。

數據庫索引的特點:

a)避免進行數據庫全表的掃描,大多數情況,只需要掃描較少的索引頁和數據頁,而不是查詢所有數據頁。而且對於非聚集索引,有時不需要訪問數據頁即可得到數據。

b)聚集索引可以避免數據插入操作,集中於表的最后一個數據頁面。

c)在某些情況下,索引可以避免排序操作。

 

 

2.索引實現原理

索引背后的數據結構基礎是B+tree,在這里不細究,只用python的簡單數據結構介紹基本的索引實現原理

為了不遍歷上面的整個列表,我們將結構改成以下並加上索引表如下:

 1 # 數據庫索引實現:
 2 {
 3     '索引': {
 4         'username': {
 5             'wyb': 1,
 6             'woz': 2,
 7         },
 8 
 9     },
10   1: {
11     "id": 1,
12     "username": "wyb",
13     "password": "xxxxxx"
14   },
15   2: {
16     "id": 2,
17     "username": "woz",
18     "password": "xxxxxx"
19   }
20 }

此時通過id查找某個用戶時直接使用id值查找即可,若要使用username查找用戶,在索引字典中查找相應username對應的id值即可,為數據表中某一項加索引即是向索引字典中加入

這一項的的名字及這一項所有值與id組成的項的字典如上圖中的索引下的username

 


免責聲明!

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



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