Oracle10g 对大型数据集进行分页–;一段时间后中止计数(*)

Oracle10g 对大型数据集进行分页–;一段时间后中止计数(*),oracle10g,pagination,performance,Oracle10g,Pagination,Performance,我们在这里使用以下分页技术: 获取给定筛选器的计数(*) 获取给定筛选器的前25条记录 ->在页面上呈现一些分页链接 只要count(*)的速度合理,这种方法就可以很好地工作。在我们的例子中,数据大小已经增长到一个非indexd查询(尽管大多数内容都包含在索引中)需要一分钟以上的时间。因此在这一点上,用户等待一个基本上不重要的数字(匹配筛选器的总记录数、页数)。前N条记录通常准备得相当快 因此,我有两个问题: 我可以将计数(*)限制在某个数字吗 或者有可能通过时间来限制它吗?(20毫秒后不

我们在这里使用以下分页技术:

  • 获取给定筛选器的
    计数(*)
  • 获取给定筛选器的前25条记录
->在页面上呈现一些分页链接

只要
count(*)
的速度合理,这种方法就可以很好地工作。在我们的例子中,数据大小已经增长到一个非indexd查询(尽管大多数内容都包含在索引中)需要一分钟以上的时间。因此在这一点上,用户等待一个基本上不重要的数字(匹配筛选器的总记录数、页数)。前N条记录通常准备得相当快

因此,我有两个问题:

  • 我可以将
    计数(*)
    限制在某个数字吗
  • 或者有可能通过时间来限制它吗?(20毫秒后不知道计数()
或者只是概括地说:有没有一些简单的方法可以避免这个问题?我们希望系统尽可能不受影响

数据库:Oracle 10g

更新

有几种情况

  • a) 有一个索引->无论是
    count(*)
    还是实际的选择都不应该是问题
  • b) 没有索引
    • count(*)
      很大,需要很长时间才能确定->rownum会有所帮助
    • count(*)
      为零或非常低,这里的时间限制会有所帮助。或者,如果结果集已经低于页面限制,我可以不进行计数(*)

您可以使用“where rownumAh非常好。我不知道我可以将rownum与count(*)一起使用。限制运行时间还有一个奇怪的技巧,但听起来非常粗糙。索引只能用于满足count(*)查询,如果它针对一个或多个非空列。如果用户只关心前N条记录,比如至少25条记录中的1-25条记录,那么他们只会在点击最后一条记录时得到最终计数。