8

如何编写一个查询,从数据存储中的 10000 个对象的集合中选择项目 2000-2010。

我知道在 GQL 中可以这样做:

select * from MyObject limit 10 offset 2000

根据文档,当使用offset引擎时,引擎仍然会获取所有行,只是不返回它们,从而使查询以与 的值线性对应的方式执行offset

有没有更好的办法?例如使用伪ROWNUM列,就像在其他类型的数据存储中可以做的那样。

4

2 回答 2

6

除了缓存结果外,没有办法有效地使用偏移量进行分页。但是,您可以使用数据存储游标通过“书签”类型的方法实现分页。

于 2010-04-16T13:08:25.107 回答
2

除了使用游标之外,您还可以使用排序顺序方法。例如:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

前 10 个对象,然后是接下来的 10 个对象,依此类推。

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;

如果您没有另一个合适的字段,字段甚至可以是键。这是一个更完整的示例:

http://code.google.com/appengine/articles/paging.html

于 2010-04-18T12:17:51.593 回答