使用Key字段上的过滤器和App Engine数据存储上的另一个(字符串)字段进行查询非常慢

时间:2014-09-10 11:41:23

标签: google-app-engine google-cloud-datastore

我有一个实体Kind A,有大约130万个实体。它有几个字段,其中两个用作数据存储区查询中的过滤器 - K(这是一个密钥)和S(这是一个字符串)。

我执行以下查询,完成时间差不多8秒:

SELECT * FROM A WHERE K=KEY('...') AND S='...' LIMIT 1

(我是通过在java中使用过滤器构建查询来实现的,但它在GQL中的工作速度也很慢。)

这合理吗?这可以以任何方式得到改善吗?

将键查询替换为其他字段(或完全删除),可以加快速度。将关键字段保存为字符串是否有意义,并在其上进行查询而不是在原始的Key类型字段上进行查询?

1 个答案:

答案 0 :(得分:2)

请你发送index.yaml文件,或者至少粘贴Kind A的所有索引?我最初的感觉是你没有适当的K和S索引,因此它正在进行全表扫描或使用另一个索引来投影结果。请查看https://developers.google.com/appengine/docs/python/datastore/indexes以获取解释。

如果您还在敲头,我建议您启动appstats并确定本地开发服务器(https://developers.google.com/appengine/docs/python/tools/appstats)上的视觉效果的缓慢程度。

最后,我想指出单个属性查找在App Engine中很快,因此K =或S =查找会很快。它们需要特别注意(索引,内存缓存等)。