被MongoDB用Index暴打的後端小菜雞日記-day 24- index使用懶人包

鰻魚燒
Sep 24, 2022

--

昨天講解index的資料結構,今天我們要來講解index相關的設定,我們應該選擇哪些欄位,建立索引,以及不同的索類型。

Photo by Joshua Sortino on Unsplash

在建立索引之前,首先必須決定好我們要建立哪一個欄位的索引,比如說我們現在有許多筆商品資料,資料結構如下。

在建立collection的當下,MongoDB本身就會自動幫我們建立_id的索引,預設會使用Unique Indexes,Unique Indexes會確保索引欄位沒有重複的值出現,意思是不會有兩筆資料的_id是一樣的。

因此在我們沒有主動建立索引的情況下,並且資料數量十分龐大的情況下,我們單獨使用_id來搜尋條件,會比使用 name、price、amount搜尋還要快。

但一般來說除非是前端要顯示特定商品的頁面,傳給後端商品_id值,讓後端回傳商品的詳細資料,大多數情況都是針對特定欄位給予條件進行搜尋。

比如說消費者很常使用商品的價格進行搜尋,這時候就可以針對price加上索引,建立的語法如下。

基本上就是在createIndex帶入一個物件,寫入你要建立index的欄位,在用 1 或是 -1決定資料的排序方向,如果是1就會按照商品價格,由小到大排序資料, -1 則是由大到小排序資料。

索引成功建立後,我們利用商品價格搜尋資料,就會命中到price_1這個索引,進而加快搜尋的速度,但是如果我們是使用商品名稱來搜尋,就不會命中到任何索引。

因此在建立索引時,必須先想好常用的搜尋場景,會使用到哪些欄位做為搜尋條件,才能建立最合適的索引。

ps. 目前示範只包含一個欄位的索引,被稱為Single Field Indexes,欄位的順序其實不太重要,填寫1 或是 -1不會有太大的差別,而明天會介紹到的Compound Index,可以包含許多欄位,這時候欄位的先後順序,以及資料排序就會影響到搜尋的效率了。

--

--

鰻魚燒

剛轉職成後端工程師的小菜雞,分享自己的學習筆記