索引用於快速尋找具有特定欄位值的文件。若沒有索引,MySQL 必須從第一個文件開始,然後讀取整個集合才能找到相關的欄位。集合越大,成本就越高。如果集合很大,而且對特定欄位的查詢很常見,請考慮在文件內部的特定欄位上建立索引。
例如,以下查詢若在 Population 欄位上建立索引,效能會更好
mysql-py> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
create_index()
方法會建立一個索引,您可以使用 JSON 文件來定義該索引,以指定要使用的欄位。本節是對索引的概觀。如需更多資訊,請參閱索引集合。
若要建立非唯一索引,請將索引名稱和索引資訊傳遞至 create_index()
方法。禁止重複的索引名稱。
以下範例指定一個名為 popul
的索引,該索引是根據 demographics
物件中的 Population
欄位所定義,並以 Integer
數值進行索引。最後一個參數表示欄位是否應要求 NOT NULL
約束。如果值為 false
,則欄位可以包含 NULL
值。索引資訊是一個 JSON 文件,其中包含要包含在索引中的一個或多個欄位的詳細資料。每個欄位定義都必須包含欄位的完整文件路徑,並指定欄位的類型。
mysql-py> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
在此,索引是使用整數數值建立的。還有更多選項可用,包括與 GeoJSON 資料搭配使用的選項。您也可以指定索引的類型,此處已省略該類型,因為預設類型 「index」 是適當的。
若要建立唯一索引,請將索引名稱、索引定義和索引類型 「unique」 傳遞至 create_index()
方法。此範例顯示在國家/地區名稱 ("Name"
) 上建立的唯一索引,這是 countryinfo
集合中要編製索引的另一個常見欄位。在索引欄位描述中,"TEXT(40)"
代表要索引的字元數,而 "required": True
則指定文件必須存在該欄位。
mysql-py> db.countryinfo.create_index("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": True}], "unique": True})