知識內容:
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