oracle 分页查询中计算总页数的count(*) 效率问题

0
今天接到一个紧急需求遇到的问题。
oracle count 几千万级 查询记录总数、总条数优化问题。
做分页时查询的时候 速度约 2s   速度可以接受,sql形式如下面的 
      SELECT *
  FROM (SELECT ROWNUM AS rowno, t.*
          FROM emp t
         WHERE  ROWNUM <= 200) table_alias
 WHERE table_alias.rowno >= 1; 

但是计算总数的时候 select count(*) from emp ;时非常慢。快30秒了
这个问题应该很多人都会遇到的。 求大神告知
 
已邀请:
1

seng - 从事BI、大数据、数据分析工作 2015-11-03 回答

SELECT ROWNUM AS rowno, t.*
          FROM emp t
         WHERE  ROWNUM <= 200
这个随机取数据的吧, 因该不要排序的,只要前200条

count(*)要扫描全表或索引, 就慢了。 有索引读取数据量就少,会快点。 应该有主键吧?
0

- 取是能力,舍是境界 2015-11-03 回答

count(*) 换成count(1)或count(字段)
0

老头子 - 专注是唯一的捷径 2015-11-03 回答

尝试使用iffs 建立非空索引 然后count这个字段
http://www.flybi.net/blog/azzo/2329
0

GeorgeYao - 路漫漫其修远兮,吾将上下而求索! 2015-11-04 回答

看看宋大师的博客吧...
http://www.cnblogs.com/CareySo ... .html
0

子建 - Kettle讲师、顾问、数据仓库架构 2015-11-05 回答

count是全表的数据量,分页只是取前几页的条数

要回复问题请先登录注册