使用H2数据库缓慢查询大型表

时间:2016-01-06 14:56:38

标签: sql playframework playframework-2.0 h2 ebean

我有一个使用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行。如何提高性能?

1 个答案:

答案 0 :(得分:1)

首先请注意,已经从Ebean的API中删除了findPagingList(),因为注意到人们使用它的方式不正确...所以你只能在旧的Ebean版本上使用findPagingList()。

通常,如果要返回/迭代很多行,请确保使用findEach()/ findEachWhile()...并且在旧的Ebean中,您将看到findIterate(),它基本上做同样的事情。

如果此查询在大约20秒内真正返回20行,那么您应该获得查询解释计划并编辑您的问题,包括执行的完整SQL和SQL解释计划。

如果你的查询返回很多行...那么你很可能不应该使用findPagingList()而是使用findIterate()...或者更好地更新到最新的Ebean并使用findEach() - 尤其是如果你使用的是Java 8。