Spring JPA Crud Repository findAll()性能改进



在我的项目中,我在postgres数据库的一个表中存储了大量的行(~3亿个记录)。一行包含77列,其中包含String、Integer类型、少量布尔值和日期。我的问题是,当我试图在GUI上浏览记录时,它的工作速度非常慢,即使我的DB只包含其最终容量的3%。

对于数据库连接,我使用Spring JPA和findAll()方法进行分页,每页20条记录几乎需要3.5s(添加索引后,之前是7.5秒),当我在DB(3.3GB)中有~ 1000万条记录时。如果我从pgsql cli

执行相同类型的查询slelect * from myTable order by column1 limit 20;

我立即得到相同的结果集,所以这不是postgres性能的问题。用本机查询重写findAll()的默认实现将时间减少到大约2.8秒,这仍然很长,而且只使用包含77列中的6列的视图来获取很少的共同点,但它没有太大变化。

有任何建议在哪里看或如何提高性能,这个应用程序将仍然可用的数据库包含30倍以上的记录?

注:App只不过是浏览这些记录的GUI,此外每15分钟~50K的新记录被插入。我的虚拟机已经分配了8vcpu和12GB内存。

我想我找到了导致这种延迟的原因,这是count()方法。在模拟计数下,findAll()第一次查询大约需要300ms,所有后续查询大约需要12-20ms。