我对GAE的一些文档有些困惑。虽然我打算增加索引来优化我的应用程序的性能,但我想澄清一下,如果它们只是为此目的而建议的,或者它们是真正需要的。数据存储中真的需要索引吗?
查询找不到索引的属性值 。这包括标记为 索引的 属性以及长文本值类型 (Text)或长二进制值类型 (Blob)的 值的属性。
带有过滤器的查询或 排序顺序属性永远比不上实体 的属性,其值是一个文本 或斑点,或写有 该属性标记为未编入索引。 如果未针对 设置属性来查询过滤器和排序顺序,则具有此类值的属性的行为为 。
从http://code.google.com/appengine/docs/java/datastore/queries.html#Introduction_to_Indexes
第一款让我相信,你根本无法排序或没有索引的属性过滤器。但是,第二段使我认为这个限制仅限于Text或Blob属性或特别注明为未索引的属性。
我很好奇这个区别,因为我有一些数字和字符串字段,我目前正在排序/过滤在未索引的生产环境中。这些查询正在后台任务中运行,后台任务大多不关心性能(宁愿优化此大小/成本)。我不知何故,幸运的是,这些数据正在返回正确的数据?
非常感谢,清除了很多混乱。这个自动索引是否默认为升序或降序? – netmau5 2011-01-19 07:08:05
@ netmau5自动索引适用于两个方向。您想要查询的所有内容都必须编入索引。 – 2011-01-20 01:02:33