我有一个实体Kind A
,有大约130万个实体。它有几个字段,其中两个用作数据存储区查询中的过滤器 - K
(这是一个密钥)和S
(这是一个字符串)。
我执行以下查询,完成时间差不多8秒:
SELECT * FROM A WHERE K=KEY('...') AND S='...' LIMIT 1
(我是通过在java中使用过滤器构建查询来实现的,但它在GQL中的工作速度也很慢。)
这合理吗?这可以以任何方式得到改善吗?
将键查询替换为其他字段(或完全删除),可以加快速度。将关键字段保存为字符串是否有意义,并在其上进行查询而不是在原始的Key类型字段上进行查询?
答案 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 =查找会很快。它们需要特别注意(索引,内存缓存等)。