java - 防止 Ebean 中的“order by”子句
问题描述
Ebean ORMsort by t0.id
向每个查询添加子句,这会导致非常非常糟糕的性能。
我使用 Play Framework 2.6、H2 1.4 数据库和 Ebean 11.15 (PlayEbean 4.1.3)。我有一张有 100k 行的表,而且它变得更大。
我有几个计划任务,它们从表中选择一批记录并处理数据,顺序无关紧要。
所以例如我使用这个查询:
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 毫秒!在我的应用程序中有很多地方我不需要排序,它可以工作得更快。
解决方案
您可以将 .orderById(false) 与您正在使用的 Ebean 版本一起使用。这是在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();
推荐阅读
- r - 使用 lapply 在数据框中填充 NA 值
- android - 离子应用程序 - 登录页面 - 文本框在其他用户操作之前不会打开键盘
- java - 从 ByteBuffer 读取特殊的 UTF-8 字符
- python - 感叹号在对象的表示中是什么意思
- python - 如何更改满足特定条件的数据框中的第一个值
- python-3.x - Python - 嵌套列表
- python - 在 makefile 目标中运行 python 脚本以并行生成源文件
- excel-formula - 计算 Excel 和数据透视表中的日期差异
- linux - 我删除了 ~/.config/plasma* 配置文件.....那么我应该如何取回它?
- google-maps - 使用 Google 的路线 API