我在互联网上找到了几个解决方案,但在性能方面,这些并不是我搜索的内容。我有一张记录超过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();
有没有办法通过查询本身来限制结果? 任何帮助都非常感谢。
谢谢。
答案 0 :(得分:1)
为什么不能将第一个结果设置为特定的偏移量?
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
查看LazyCarDataModel.java http://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml