如何编写一个从数据存储中10000个对象的集合中选择项目2000-2010的查询。
我知道在GQL中可以这样做:
select * from MyObject limit 10 offset 2000
根据documentation,当使用offset
时,引擎仍将获取所有行,但不返回它们,从而使查询以与{的值线性对应的方式执行{1}}。
还有更好的方法吗?例如使用伪offset
列,就像在其他类型的数据存储中一样。
答案 0 :(得分:6)
除了缓存结果之外,没有办法有效地使用偏移量进行分页。但是,您可以使用datastore cursors来使用“书签”类型方法实现分页。
答案 1 :(得分:2)
除了使用游标之外,您还可以使用排序顺序方法。例如:
SELECT * FROM MyObject ORDER BY field LIMIT 10;
表示前10个对象,然后是接下来的10个对象,等等。
SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;
如果您没有其他适当的字段,字段甚至可能是关键字。这是一个更完整的例子: