索引總覽

本節說明 Cloud Firestore Enterprise 版的索引。Cloud Firestore Enterprise 版預設不會建立任何索引。如要提升資料庫效能,請為最常使用的查詢建立索引。

索引對資料庫效能有極大影響。如果查詢有索引,資料庫就能減少需要掃描的資料量,並減少排序結果所需的工作,有效率地傳回結果。不過,索引項目會增加儲存成本,以及在索引欄位上執行寫入作業時的工作量。

版本差異

下表概述 Cloud Firestore Standard 版和 Cloud Firestore Enterprise 版之間的主要索引差異。

功能 Cloud Firestore Standard 版 Cloud Firestore Enterprise 版
索引規定 所有查詢都需要索引才能執行。由於這項規定,查詢通常都能順利執行。 查詢不需要索引。可進行未建立索引的讀取作業,移除原型設計的障礙。
自動建立索引 根據預設,系統會自動為文件中的所有欄位建立單一欄位索引。 不會自動建立索引。您必須手動管理所有索引。
索引密度 預設為稀疏。只有當文件包含每個已建立索引欄位的值時,系統才會為集合群組中的文件建立索引。 預設為非稀疏。系統會為集合群組中的所有文件建立索引。 如果已建立索引的欄位沒有值,系統會將其設為 NULL。可使用稀疏索引選項變更行為。
支援的索引類型和選項
  • 單一欄位 (自動索引)
  • 複合式索引
  • 集合或集合群組範圍
  • array-contains
  • 向量
  • 集合或集合群組範圍
  • 非稀疏或稀疏索引密度
  • array-contains
  • 向量
  • 不重複的查詢

索引定義和結構

索引包含下列項目:

  • 集合 ID
  • 指定集合中的欄位清單
  • 每個欄位的排序方式 (遞增或遞減)

索引也可以啟用「稀疏」或「不重複」選項。

索引排序

每個欄位的順序和排序方向會定義索引。舉例來說,以下兩個索引是不同的索引,無法互換:

集合 欄位
城市 國家/地區 (遞增)、人口 (遞減)
城市 人口數 (遞減)、國家/地區 (遞增)、

建立索引來支援查詢時,請按照查詢中的欄位順序加入欄位。

索引密度

根據預設,索引項目會儲存集合中所有文件的資料。這就是所謂的非稀疏索引。無論文件是否包含索引中指定的任何欄位,系統都會為文件新增索引項目。產生索引項目時,系統會將不存在的欄位視為具有 NULL 值。如要變更這項行為,您可以將索引定義為稀疏索引。

稀疏索引

稀疏索引只會為集合中符合以下條件的文件建立索引:在至少一個已建立索引欄位包含一個值 (包括空值在內)。稀疏索引可降低儲存空間費用,並提升效能。

不重複的查詢

設定不重複索引選項,強制為已建立索引的欄位設定不重複值。 如果是多個欄位的索引,每個值組合在索引中都不得重複。資料庫會拒絕任何嘗試建立重複值索引項目的更新和插入作業。如果索引欄位的資料含有重複值,且您嘗試建立不重複索引,索引建構作業就會失敗,作業詳細資料中會顯示錯誤訊息。

唯一索引中缺少的欄位

如果您插入的文件缺少不重複索引的欄位,索引會為缺少的欄位設定 null 值。產生的索引項目必須是唯一的,否則作業會失敗。

舉例來說,使用這個索引:

集合 已建立索引的欄位 查詢範圍
城市 名稱 (遞增) 集合

如果您將文件 {"abbreviation": "LA"} 新增至集合,不重複的索引會建立一個項目,並將 name 設為 null。如果您嘗試新增文件 {"abbreviation": "NYC"},作業會失敗,因為產生的唯一索引項目相同。

如果是不重複索引,且包含多個欄位,也會出現相同行為。 建立或更新文件時,系統會將缺少的索引欄位設為 null,且產生的索引項目在索引中必須是唯一的。

排解索引建構錯誤

管理索引時,可能會遇到索引建構錯誤。如果資料庫發生資料問題,索引作業可能會失敗。索引作業可能會因下列原因而失敗:

  • 您已達到索引上限。舉例來說,作業可能已達到每份文件的索引項目數量上限。如果索引建立失敗,系統會顯示錯誤訊息。如果尚未達到索引限制,請重試索引作業。
  • 您設定了不重複的索引選項,而索引欄位的資料會建立重複的索引項目。如要繼續,請從資料中移除重複的值組合。

後續步驟

瞭解如何建立及管理索引