计算实体时限制查询结果

时间:2015-02-10 09:56:07

标签: java google-app-engine jdo

我想要的是计算Employees的数量,但我只想知道是否有50个或更多Employees。如果我执行Count - 操作(请参见下文)并在0-> 51之间设置Range,那么查询是否会计入最多51个,还是仍会计算所有Employees ?我想知道这一点,以便查询在每次运行查询时都不会计算所有1000名员工(对性能有害)。

Query query = pm.newQuery("SELECT count(p) FROM Employees p");
query.setRange(0, 51);
long count = (long) query.execute();
if(count >= skipThreshold)
{
   acceptedEmployees.add(mode);
}

谢谢!

3 个答案:

答案 0 :(得分:1)

如果你执行SELECT count(p) FROM Employees p,则会返回一行,其中包含一个值... COUNT,因为您要求计数。范围在该查询中毫无意义。当查询返回多行(对象)时,可以使用范围。

答案 1 :(得分:0)

来自google documentation

范围

查询可以指定要返回给应用程序的结果范围。范围指示完整结果集中的哪些结果应该是返回的第一个和最后一个。结果由其数字索引标识,0表示集合中的第一个结果。例如,5,10的范围返回第6到第10个结果:

q.setRange(5, 10);

答案 2 :(得分:0)

了解您拥有至少50名员工的最佳方法是使用以下查询/计数语句。

query = db.Query(Employee)
if query.count(50) == 50 :
    # Means, you have at least 50 or more Employees in your Datastore

快乐的编码......