【发布时间】:2011-08-26 22:02:31
【问题描述】:
来自 appengine 博客:
高级查询规划 - 我们不再需要爆炸索引并减少许多查询的自定义索引要求。 SDK 会在几种情况下建议更好的索引,下一篇文章将描述可能的进一步优化。
作为测试,我在 appengine 中有一个具有 listProperty 的实体
class Entity(db.Model):
tags = db.StringListProperty()
我有 500,000 个实体,其中一半有标签 = ['1'],另一半有标签 = ['2']
我的查询是
SELECT FROM Entity WHERE tags='1' and tags='2'
它很快就不会返回任何结果。它使用什么计划来实现这一目标?列表如何索引以实现此目的?在过去,需要一个爆炸式的索引。
【问题讨论】:
-
IIRC 这在其中一个技术讲座中有所涉及 - 它从不需要爆炸索引,只需要一个 StringListProperty
-
高级查询计划更改不会影响此查询。你是如何插入实体的?如果所有 tags=2 的 ID 都比 tags=1 的 ID 高(反之亦然),这个查询很容易满足。
-
我认为查询的意思是:SELECT FROM Entity WHERE tags='1' and tags='2' ORDER BY date
标签: google-app-engine query-optimization google-cloud-datastore