【发布时间】:2012-07-23 11:39:40
【问题描述】:
假设一个 Web 应用程序(Java、Spring、Hibernate 和 Sybase 作为 DB)具有多个(例如 5 个)不同的搜索屏幕,我想首先计算基于用户条件的搜索结果是否超过限制,例如 1000 行.即使用户提供了合理的过滤器和标准,也可能会出现超过 1000 个的巨大结果。
推荐这样做:
- 在此处从表 --clauses 等中选择 count(*)
- 如果 > 1000,则不进行实际搜索,返回并显示限制错误(告诉用户细化搜索)
- else if
或者有更好的解决方案来处理这个问题吗?
如果这是要走的路,我的后续问题是,我们如何避免重复 sql 查询?因为我理解这样做,所以需要我声明相同的搜索 sql,除了 select 子句将只包含 count(*)。
更新
另外,我想避免两件事: 1.从执行实际的sql处理 2. 通过 ORM 加载/映射域对象(在这种情况下为 Hibernate) * 当我检测到计数 > 1000 时,避免使用 1 和 2。
【问题讨论】:
-
你可能不会避免 (1) 你什么时候先 COUNT。您唯一要避免的是将结果从数据库发送回。对(2)的猜测是,如果你想使用 ORM,除非你想有两个查询,否则没有办法解决这个问题。
-
在某些情况下,是的。检索行和计数会产生一些额外的 I/O 开销,但是如果没有达到限制的所有内容,查询就无法知道计数。
标签: java sql search web-search