谷歌云数据存储规定,需要建立复合索引来查询一种类型的多个字段。以下面的查询为例,
class Greeting(ndb.Model):
user = ndb.StringProperty()
place = ndb.StringProperty()
# Query 1
Greeting.query(Greeting.user == 'yash@gmail.com', Greeting.place == 'London').fetch()
# Query 2
Greeting.query(Greeting.user == 'yash@gmail.com', Greeting.place == 'London').count()
我使用带ndb的python访问云数据存储。在上面的示例中,查询1引发
NeedIndexError
如果没有在上定义复合索引
user
和
place
. 但是查询2工作正常,即使没有索引
用户
和
地方
.
我想了解云数据存储在为获取实体列表(查询1)而强制使用索引时,如何在不使用索引的情况下获取计数(查询2)。我了解它存储每种索引的统计信息,这将导致对现有索引计数的更快响应(请参阅
docs
)但我无法解释上述行为。
注意:当查询给定类型的一个属性时没有问题,因为云数据存储默认在单个属性上有索引。