本頁面由 Cloud Translation API 翻譯而成。
Switch to English

索引您的數據

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編制索引

在此示例中,我們將演示.indexOn如何與orderByValue() 。假設我們使用以下數據製作了恐龍運動得分排行榜:

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

由於我們使用orderByValue()創建排行榜,因此可以通過在/scores節點上添加.value規則來優化查詢:

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