【问题标题】:Firestore: Does a composite index perform better on queries with multiple where clauses?Firestore:复合索引在具有多个 where 子句的查询上表现更好吗?
【发布时间】:2019-10-03 23:54:31
【问题描述】:

我有以下代码:

foldersRef.where("ParentID", "==", "1").where("Deleted", "==", false)
  1. 对于此查询,复合索引(索引ParentIDDeleted)是否比单字段索引更可取?
  2. 如果我也有 ParentIDDeleted 的单独单字段索引,Firestore 会知道使用复合索引吗?
  3. 创建复合索引时,字段的顺序是否重要?
  4. .where() 子句/函数调用的顺序重要吗?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:
    1. 对于此查询,复合索引(索引 ParentID 和 Deleted)是否优于单字段索引?

    如果您使用以下代码行:

    foldersRef.where("ParentID", "==", "1").where("Deleted", "==", false)
    

    没有任何排序(ASCENDING 或 DESCENDING),就不需要创建复合索引。 Firestore 会自动创建所需的索引。

    1. 如果我还有 ParentID 和 Deleted 的单个单字段索引,Firestore 会知道使用复合索引吗?

    没有。 Fiestore 也会自动创建单字段索引。因此无需为单个文件创建任何索引。除此之外,如果您有单独的带有排序的字段索引,这并不意味着您也有这些字段的复合索引。你需要自己创造。

    1. 创建复合索引时,字段的顺序是否重要?

    是的,如果您更改where() 调用的顺序,您还需要相应地创建相应的索引。

    1. 我的 .where() 子句/函数调用的顺序重要吗?

    在速度方面,只要创建正确的索引,就没有。

    【讨论】:

      【解决方案2】:
      1. 是的,对于读取,复合索引将比单字段索引的合并执行得更好。它允许 Cloud Firestore 使用一个索引,而不是合并多个单字段索引。
      2. 是的,Cloud Firestore 将优先考虑复合索引。
      3. (也是 4。)是的,字段的顺序在您的索引定义和查询中都很重要。 foldersRef.where("ParentID", "==", "1").where("Deleted", "==", false)foldersRef.where("Deleted", "==", false).where("ParentID", "==", "1") 需要两个不同的复合索引。

      【讨论】:

        猜你喜欢
        • 2021-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        相关资源
        最近更新 更多