如果有一个Web应用程序(Java,Spring,Hibernate和Sybase作为数据库),有几个,比如5个不同的搜索屏幕,我想先计算一下,如果基于用户标准的搜索结果超出限制,比如1000行。即使用户提供合理的过滤器和标准,也可能发生超过1000的巨大结果。
这样做的建议是这样的:
或者有更好的解决方案来处理这个问题吗?
如果这是要走的路,我的后续问题是,我们怎样才能避免重复sql查询?因为我理解这样做,会要求我声明相同的搜索sql,除了select子句只包含count(*)。
更新
此外,我想避免两件事: 1.执行实际的sql处理 2.通过ORM加载/映射域对象(在本例中为Hibernate) * 1&当我检测到计数> 1时,避免使用图2所示的计数器。 1000。
答案 0 :(得分:2)
我根本不会运行COUNT(*)
,只需使用LIMIT 1001
运行查询。您可能正在生成完全相同的结果集(即,执行COUNT,您必须生成结果集),并且下一次命中将来自缓存,或者最坏的情况下您将不得不重新计算。你刚刚做了两次同样的工作
答案 1 :(得分:0)
我们也按照相同的程序进行申请。是的,唯一的区别是在SQL中放置count(1)而不是*。
但是,您可能需要了解,有时计数查询是一个花费更多时间然后获取结果子集的查询。
答案 2 :(得分:0)
根据您从行集中检索行的方式,您只需在该级别过滤结果。
即
int rowIndex = 0;
while (rs.hasNext() && rowIndex < 1000) {
// ... Extract results
rowIndex++;
}
您可能想要警告用户虽然已经修剪了结果集;)