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