【发布时间】:2017-09-26 17:56:45
【问题描述】:
我在我的 Web 应用程序中实现了用于表格查看的服务器端分页。这意味着用户有按钮来激活第一页、最后一页、下一页和上一页。每次点击都会产生一个服务器请求,其中只返回要显示的记录。
要实现“最后一页”功能和滚动条,我需要客户端具有表格的大小。我可以通过以下方法在服务器端获取它:
public long getCount(Class entityClass) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root root = query.from(entityClass);
Expression<Long> count = builder.count(root);
query.select(count);
TypedQuery<Long> typedQuery = em.createQuery(query);
return typedQuery.getSingleResult();
}
这个表可能非常活跃,有数百万条记录。运行此函数是否会导致 SQL 服务器中的大量 CPU 周期被使用?
问题在于此应用程序的扩展性如何。
【问题讨论】:
-
我们目前正在自己处理这个问题,我想说的是,您可能只需要执行一次计数查询,而无需在后续页面上执行。如果是这样,那么
COUNT查询的成本可能不是影响分页搜索性能的最大因素。