Ebean ORM向每个查询添加sort by t0.id
子句,这会导致非常糟糕的性能。
我使用Play Framework 2.6,H2 1.4数据库和Ebean 11.15(PlayEbean 4.1.3)。我有一张有10万行的表格,而且表格越来越大。
我有几个计划任务,它们从表中选择一批记录并处理数据,顺序无关紧要。
例如,我使用以下查询:
Chunk.find.query()
.select("id, lat, lon, data, status")
.fetch("area", "id, polygon")
.setMaxRows(100)
.where()
.eq("status", 0)
.query()
.findList();
然后Eben生成并执行以下操作:
select
c.id,
c.lat,
c.lon,
c.data,
c.status,
a.id,
a.polygon
from chunk c
join area a on a.id = c.area_id
where c.status = 0
order by c.id
limit 100;
如果没有order by c.id
,那就太好了。
如果我手动执行查询,将需要约5000毫秒。但是,如果我删除order by
子句,则只需要10毫秒!而且在我的应用程序中有很多地方不需要排序,因此可以更快地工作。
答案 0 :(得分:0)
您可以在所使用的Ebean版本中使用.orderById(false)。这是在11.12.1
中添加的Chunk.find.query()
.select("id, lat, lon, data, status")
.fetch("area", "id, polygon")
.setMaxRows(100)
.where()
.eq("status", 0)
.query()
.orderById(false)
.findList();
答案 1 :(得分:0)
目前唯一的解决方案是使用.orderBy("1")