Firebase警告:使用未指定的索引

时间:2017-07-22 06:10:50

标签: javascript firebase firebase-realtime-database nosql

对于我在JavaScript查询中使用的每个orderByChild,我从Firebase收到此警告消息:

  

FIREBASE警告:使用未指定的索引。考虑在/ table中添加“.indexOn”:“”表示您的安全规则以获得更好的性能

到目前为止,我的查询运行得非常快,所以我认为没有必要包含indexOn。只是想知道什么是负面影响?

另外,我如何实际禁用警告,因为在调试时它们非常烦人。

3 个答案:

答案 0 :(得分:10)

如果您处于开发阶段,您将无法感受到其中的差异。但随着数据的增长,索引有助于提高查询速度。

阅读本文以了解有关索引优势的更多信息。 https://firebase.google.com/docs/database/security/indexing-data

据我所知,要禁用警告,您必须编辑firebase源代码。 Is there someway to disable all firebase logging to console?

答案 1 :(得分:7)

正如其他人所说:如果你没有定义索引,所有过滤都发生在客户端。这在初始开发期间可能很好,但随着您添加更多数据,它会变得越来越浪费。

要解决此问题,请在Firebase数据库规则中定义正确的索引。您可以修改Database panel in your project's Firebase console中的规则。请参阅Firebase文档中的defining data indexes

  

我有什么方法可以通过索引观察发生了哪些变化?

  1. 定义正确的索引后,警告将从JavaScript控制台中消失。
  2. 此外,您还可以在浏览器开发人员工具的“网络”标签中查看Firebase客户端与服务器之间的流量。在定义正确的索引之前,您将看到Firebase客户端下载该位置中的所有数据(因为它在本地执行过滤)。定义正确的索引后,您将看到Firebase客户端仅下载与查询匹配的数据。

答案 2 :(得分:3)

Firebase提供了用于订购和查询数据的强大工具。索引可以提高查询的性能。考虑一个名为dinosaur的表有一些数据,如:

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

你需要(搜索)命令恐龙的高度和长度,但从不按重量。所以你需要为dinosaur表设置规则,如:

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

通过告知Firebase此信息,Firebase可以使用此.indexOn来优化我们对高度和长度的查询。然后,我们维护了Firebase安全性,以便查询我们的数据并提高查询性能。