###### tags: `Index研究` # Index是什麼 一般來說,當我們想要從資料庫找符合某特定條件的資料,資料庫的標準程序是一行一行檢查,並且問自己「這是符合條件的的資料嗎?」如果是,就把資料拿出來,如果不是,就繼續檢查直到結束。 稱為Full Table Scan(全表掃描)。 所以當資料量一大,資料庫要找到資料的時間就會越來越長。索引的目的就是讓資料庫不用一行一行檢查就可以找到資料。 它其實是一種資料結構,我們看不到,因為它通常存在我們使用的資料庫管理系統(DBMS, Database Management System)裡面。 # 索引是如何運作的? 大部分的 DBMS 都會預設把主鍵加上索引,以mongo為例,如下圖 ![](https://i.imgur.com/n6VU8fX.png) mongo預設自己產生的ObjectID為索引 現在以我們系統的Catalog為例,Catalog的ID欄位有被加上索引 ![](https://i.imgur.com/EApu8M0.png) 實際上在資料庫中,有另外一張表裡面儲存了Catalog裡面的所有ID,而TestIndex每一個資料(ID)都對應到Catalog中的完整資料。 同時可以想像現在mongo中會有像這樣的B樹儲存在系統中 ![](https://i.imgur.com/uqRVk4G.png) 所以今天我們想要找TestIndex中一個ID = 2640的資料,資料庫會用自己的演算法,在TestIndex中快速找到ID = 2640這筆資料,然後再從這筆資料連到Catalog中對應的資料。 ![](https://i.imgur.com/STXrShc.gif) ![](https://i.imgur.com/lSW9jME.png)