大数据集的分页? - 一段时间后中止计数(*)

时间:2010-11-30 16:30:01

标签: oracle10g pagination performance

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

  • 获取给定过滤器的count(*)
  • 获取给定过滤器的前25条记录

- >在页面上呈现一些分页链接

只要count(*)合理快速,这种方法就能很好地运作。在我们的例子中,数据大小已经增长到非索引查询(尽管大多数东西被索引覆盖)的时间超过一分钟。因此,此时用户等待一个大多数不重要的数字(总记录匹配过滤器,页数)。前N个记录通常很快就准备好了。

因此我有两个问题:

  • 我可以将count(*)限制为某个数字
  • 还是可以按时间限制它? (20分钟后不知道count()

或者只是一般情况:是否有一些简单的方法来避免这个问题?我们希望保持系统尽可能不受影响。

数据库:Oracle 10g

更新

有几种情况

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

1 个答案:

答案 0 :(得分:3)

你可以使用'where rownum< x'限制要计数的行数。如果你需要向你的用户显示你有更多的寄存器,你可以使用x + 1来计算是否有超过x个寄存器。