參考: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
如下圖所示

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