數據庫索引原理


參考:http://www.ituring.com.cn/article/986

為什么需要索引

打個比方來說,索引的功能相當於字典前面的拼音目錄一樣。

假如一本詞典3000頁,我們要找到‘索’字,如果沒有拼音目錄我們會從頭開始查找,有了拼音目錄我們可以現在拼音目錄找到‘suo’,然后掀到‘suo’的前后頁來找到‘索’字。

數據庫也一樣。數據在磁盤上是以塊的形式存儲的,這個塊相當於字典的頁。磁盤上的這些數據塊與鏈表類似,即它們都包含一個數據段和一個指針,指針指向下一個節點(數據塊)的內存地址,而且它們都不需要連續存儲(即邏輯上相鄰的數據塊在物理上可以相隔很遠)。

如圖所示

我們建立一個表

字段 數據類型 字節大小
ID int 4個字節
Name char(4) 4個字節

假設次數據庫只有一個表,數據庫初始大小是1MB,那么此數據庫被分成N=1024/8=128;假設有256條記錄那么每個數據庫有R=256/128=2條記錄。

如果沒有索引我們要從頭至尾遍歷所有的數據塊。按照ID查找,我們需要128次才能找到我們需要的某個Name。也就是N次

如果對這個“ID”建立了索引,即從小到大進行了排序之后我們就可以采用二叉樹的形式進行查找。那么我們只需要8次,也就是log2 256=8次。也就是log2N

如下圖所示

 

所以有無索引的本質區別在於查找的方式不一樣。無索引是線性查找,有索引的查找是二叉樹查找。

 


免責聲明!

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



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