我什么时候需要 Google App Engine 数据存储区的索引?

When do I need index for Google App Engine Datastore?

我正在为我的项目使用 Google App enginge Python 2.7 标准环境和旧数据存储(不是 NDB)。

我遇到了 Datastore 自定义索引的奇怪行为。

我有这样的模型。

class EmailHistory(db.Model):
    code = db.StringProperty(required=True)
    account = db.ReferenceProperty(Account)
    group = db.ReferenceProperty(Group)
    ......

我尝试使用下面的查询来获取实体。

q = EmailHistory.all().filter('account =', account).filter('code =', code).filter('group =', group)
lst = [e for e in q]

我原以为此查询需要自定义索引,因为我正在按三个属性进行查询。 (我的理解是 AppEngine 会为每个 属性 自动创建内置索引,所以我不需要为单个 属性 的查询定义索引。但是如果我想通过多个属性进行查询,我将需要定义自定义索引)

但是当我在本地 运行 它时,它没有自动生成自定义索引。此外,当我 运行 它在 Google App 引擎服务器上时,我能够在没有 NeedIndexError 的情况下获取实体。

我的问题是 Datatstore 到底什么时候需要自定义索引?我已经阅读了他们的官方文档,但我没有弄明白为什么我不需要为上面的查询自定义索引。 https://cloud.google.com/appengine/docs/standard/python/datastore/indexes

Cloud Datastore 能够在可以使用合并联接的地方进行查询。您可以在 https://cloud.google.com/appengine/articles/indexselection 找到更多详细信息。

https://cloud.google.com/appengine/docs/standard/python/datastore/indexes#index-configuration 上,显示 "These predefined indexes are sufficient to perform many simple queries, such as equality-only queries and simple inequality queries"。您的查询是仅相等查询。