【问题标题】:Slow performance when using high offset使用高偏移时性能下降
【发布时间】:2014-08-19 09:11:22
【问题描述】:

例如,我想从包含大约 18K 行的citizen 表中检索所有数据。

String sqlResult = "SELECT * FROM CITIZEN";

Query query = getEntityManager().createNativeQuery(sqlResult);
query.setFirstResult(searchFrom);
query.setMaxResults(searchCount); // searchCount is 20

List<Object[]> listStayCit = query.getResultList();

一切都很好,直到“searchFrom”偏移量很大(17K 或其他东西)。例如,获得 20 行( 17,000 到 17,020 )需要 3-4 分钟。那么有没有更好的方法来获得它更快,但不是通过调整数据库?

P/s:对不起我的英语不好

【问题讨论】:

  • 你使用哪个数据库?
  • 可以添加生成的SQL语句吗?
  • 可能生成的查询会引起一些关于 ROWID 使用的皱眉。事实是,所使用的查询以分页方式进行是非常糟糕的。它甚至没有按可预测的顺序获取结果。

标签: jpa spring-data


【解决方案1】:

您可以使用批量查询。 在这里可以找到一篇很好的文章来解释您的问题的解决方案: http://java-persistence-performance.blogspot.in/2010/08/batch-fetching-optimizing-object-graph.html

【讨论】:

  • 当您已经在使用setFirstResult()setMaxResults() 时,如何使用批处理查询来解决问题?
猜你喜欢
  • 2020-02-05
  • 2011-11-07
  • 2012-08-30
  • 2014-03-02
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多