从数据库中检索特定数量的记录 - JPA(Impove performance)

时间:2015-09-03 07:30:41

标签: java hibernate jpa spring-data-jpa persistence

我在互联网上找到了几个解决方案,但在性能方面,这些并不是我搜索的内容。我有一张记录超过10,000,000条记录的表格。我需要只读取最近150个结果

 Procedure CopyTableRecord(View: TcxGridTableView; IndexToCopy : Integer);
var i:integer;
PlannerCalendar1:TPlannerCalendar;
Begin
  View.DataController.Insert;
  For I := 0 To Pred(View.ColumnCount) Do
    View.Columns[I].EditValue := view.DataController.Values[1, I];
  View.Columns[1].EditValue := PlannerCalendar1.Date;
  View.DataController.Post(True);
End;

procedure TMain_Form.Sendto1Click(Sender: TObject);
begin
CopyTableRecord(cxGrid1DBTableView1, cxGrid1DBTableView1.DataController.FocusedRecordIndex);
end;

此代码完成了这项工作。但它仍然可以从db 中读取所有10,000,000条记录,这会导致Web服务器出现大量过载。我可以简单地限制查询,

query.select(trailRoot).distinct(Boolean.TRUE)
    .where(buildPredicateForAuditTrail(auditTrailCriteria, criteriaBuilder, trailRoot));

final TypedQuery<AuditTrail> typedQuery = entityManager.createQuery(query);
return typedQuery.setFirstResult(auditTrailCriteria.calculateFirstResultIndex())
    .setMaxResults(150).getResultList();

有没有办法通过查询本身来限制结果? 任何帮助都非常感谢。

谢谢。

1 个答案:

答案 0 :(得分:1)

为什么不能将第一个结果设置为特定的偏移量?

query.setFirstResult(firstResult);
query.setMaxResults(maxResults);

查看LazyCarDataModel.java http://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml