如何快速的获取oracle数据库中表中记录行数,不使用select count(1)方式

数据库版本:Oracle 10G

 

今天查询下数据库中一个表的具体记录数,使用

select count(1) from [tablename],执行起来速度非常慢,所以想看看是否有更好的办法,发现,在tabs表已经存在了该表记录数据了,直接运行如下sql就可以了

 

select TABLE_NAME, CC.num_rows, CC.last_analyzed
  from tabs CC

 

 

经过查询资料发现,从tabs表中获取的数据不是非常准确,在tabs表中存在一个字段last_analyzed,有最后分析的日期,好像都不是最新,可能导致数据不是非常准确,可以通过在command下面执行EXEC dbms_stats.gather_table_stats('【空间名称】','【tablename】',cascade=>true);,可以刷新tabs表中的num_rows列,以及最后更新时间

 

 

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as rep_hea
 
SQL> EXEC dbms_stats.gather_table_stats('【username】','【tablename】',cascade=>true);

 

--单个表统计数据的统计数据更新
 
PL/SQL procedure successfully completed
 
SQL> EXEC dbms_stats.gather_schema_stats('【username】',estimate_percent=>100,cascade=> TRUE);

 

--更新整个用户所有表的统计数据更新

 

 

select TABLE_NAME, CC.num_rows, CC.last_analyzed
  from tabs CC
 

执行完毕之后,发现last_analyzed变成了刚才执行 dbms_stats时间

 

不同统计方式导致分区表的统计信息不同

Oracle — 作者 pingshx @ 15:47

问题的起因:最近发现一张分区表:从dba_table得到的统计信息跟 dba_tab_stats/dba_tab_partitions查得的信息出入很大,后来查得的原因是: 脚本里调用dbms_ddl来收集统计信息,而dbms_ddl实际上是调用analyze命令,analyze基本上不会用来收集统计信息了。我们通常是调用dbms_stats来统计的。

 

即使数据量出现大的变动,analyze也不会反映到dba_tables,这就再次说明用analyze来收集统计信息是存在问题的,正当途径还是用dbms_stats来收集。这个脚本也不知是哪位大佬写的。

 

 

http://pingshx.itpub.net/post/39434/497343

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值