我有一个使用Ebean和H2的Play应用程序(2.3.4 java)。
我有一张大桌子(500000行),当我问这个查询时,我会在大约20秒后得到结果(2014年体面的笔记本电脑)
return new Finder<>(Long.class, Event.class).where()
.where().eq("author.id", getId())
.orderBy("id desc")
.findPagingList(20)
.setFetchAhead(false)
.getPage(page);
它基本上意味着我想要我的表的最后20行。如何提高性能?
答案 0 :(得分:1)
首先请注意,已经从Ebean的API中删除了findPagingList(),因为注意到人们使用它的方式不正确...所以你只能在旧的Ebean版本上使用findPagingList()。
通常,如果要返回/迭代很多行,请确保使用findEach()/ findEachWhile()...并且在旧的Ebean中,您将看到findIterate(),它基本上做同样的事情。
如果此查询在大约20秒内真正返回20行,那么您应该获得查询解释计划并编辑您的问题,包括执行的完整SQL和SQL解释计划。
如果你的查询返回很多行...那么你很可能不应该使用findPagingList()而是使用findIterate()...或者更好地更新到最新的Ebean并使用findEach() - 尤其是如果你使用的是Java 8。