我使用NDB查询通过IN运算符按键列表检索实体,然后按日期过滤。该查询被分解为几个子查询,这些查询是用doc编写的。并按顺序而不是并行运行。
[]int
查询分析图显示了顺序运行的子查询。 25键需要大约0.3秒。查询延迟与要获取的密钥数成线性关系。
有没有办法优化查询,按键检索实体和按日期范围过滤的最佳做法是什么?
答案 0 :(得分:2)
问题在于IN运算符。
对于键中的每个键,GAE将执行单个查询。
来自GAE文档:
IN运算符还执行多个查询:一个用于指定列表中的每个项目,所有其他过滤器保持不变,IN过滤器替换为等号(=)过滤器。结果按列表中的项目顺序合并。如果查询具有多个IN过滤器,则会将其作为多个查询执行,每个查询对应于IN列表中每个可能的值组合。
包含不等于(!=)或IN运算符的单个查询仅限于 不超过30个子查询。
https://cloud.google.com/appengine/docs/standard/python/datastore/queries
modified_date没问题,因为有一个索引,因此效率很高。