建立資料索引

Firebase 可讓您使用任意子鍵,對資料執行臨時查詢。如果您事先知道索引,可以透過 Firebase 即時資料庫安全性規則中的 .indexOn 規則定義索引,改善查詢效能。

定義資料索引

Firebase 提供強大的工具 訂購查詢資料 具體來說,Firebase 能讓您使用任何一種 常見的子項金鑰隨著應用程式的增加,這項查詢的效能也會下降。不過, 告訴 Firebase 要查詢的鍵,Firebase 會在伺服器中為這些金鑰建立索引,以改善 查詢成效

使用 orderByChild 建立索引

最簡單的方式就是舉例說明。Firebase 全體人員都同意 恐龍真的很酷以下這段文字是來自恐龍事實的樣本資料庫三 將會用於說明 .indexOn 如何與 orderByChild() 搭配運作。

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

假設我們要在應用程式中使用名稱、高度和 但絕不會依據重量只要告訴 Firebase,即可提高查詢成效 這些資訊由於恐龍的名稱只是鍵,所以 Firebase 已經 會按恐龍名稱最佳化查詢,因為這是記錄關鍵。 我們可以使用 .indexOn,指示 Firebase 最佳化高度和長度的查詢:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

就像其他規則一樣,您可以在規則中的任何層級指定 .indexOn 規則。 我們將這個例子放在上述範例的根層級,因為所有恐龍資料都儲存下來 位於資料庫根目錄

使用 orderByValue 建立索引

在此範例中,我們會示範如何搭配使用 .indexOnorderByValue()。 假設我們要製作恐龍體育賽事比數排行榜,其中包含下列資料:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

由於我們使用 orderByValue() 建立排行榜,因此可以在 /scores 節點中新增 .value 規則來最佳化查詢:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}