文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


22.3.3.6 建立和刪除索引

索引用於快速尋找具有特定欄位值的文件。如果沒有索引,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})
刪除索引

若要刪除索引,請將要刪除的索引名稱傳遞至 dropIndex() 方法。例如,您可以如下刪除 popul 索引

mysql-js> db.countryinfo.dropIndex("popul")
相關資訊