Я использую стандартную среду Google App enginge Python 2.7 со старым хранилищем данных (не NDB) для своего проекта.
Я столкнулся со странным поведением пользовательского индекса хранилища данных.
У меня есть такая модель.
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 Engine, я мог получать сущности без 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 говорится: «Эти предопределенные индексы достаточны для выполнения многих простых запросов, таких как запросы только на равенство и простые запросы на неравенство». Ваш запрос является запросом только на равенство.