java - 在进行实际搜索之前计算行数

标签 java sql search web-search

给定一个具有多个(例如 5 个)不同搜索屏幕的 Web 应用程序(Java、Spring、Hibernate 和 Sybase 作为数据库),我想首先计算基于用户条件的搜索结果是否超出限制(例如 1000 行) 。即使用户提供合理的过滤器和标准,也可能会出现超过 1000 个的巨大结果。

建议这样做:

  1. 从表 --clauses 等中选择 count(*)
  2. 如果 > 1000,则不进行实际搜索,返回并显示限制错误(告诉用户优化搜索)
  3. else if < 1000,进行实际搜索并将结果集返回给用户

或者有更好的解决方案来处理这个问题吗?

如果这是要走的路,我的后续问题是,我们如何避免重复 sql 查询?因为我知道这样做,所以需要我声明相同的搜索 sql,除了 select 子句仅包含 count(*)。

更新

此外,我想避免两件事: 1.从执行实际sql开始处理 2. ORM(本例中为 Hibernate)加载/映射域对象 *当我检测到计数 > 1000 时,1 和 2 都会被避免。

最佳答案

我根本不会运行 COUNT(*),只是使用 LIMIT 1001 运行查询。您很可能在计数中生成完全相同的结果集(即,要执行 COUNT,您必须生成结果集),并且下一次命中将来自缓存,或者最坏的情况是您必须重新计算。你只是做了两次同样的工作

关于java - 在进行实际搜索之前计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11642975/

相关文章:

mysql - 如果重复(不是 DISTINCT),只获取一个数据

java - 如何正确处理来自Web服务的anyType()?

java - 如何添加 MBean 方法的描述以在 JBOSS 的 jmx-console 中查看它

php - 使用 PHP 将 MySQL 查询的结果显示到表中

sql - 引用游标类型 oracle

arrays - 如何有效地搜索结构化数字数组

java - 如何在HashMap中查找元素

java - 使用控制台界面搜索数组

java - JMS MQ 连接在 JSF 2 SessionBean 中关闭

java - 用 Java 实现 RTSP 媒体服务器