Oracle数据库如何快速查询表的记录数

Oracle 专栏收录该内容
53 篇文章 1 订阅

      在平常的数据库操作中,有时候我们会进行查询某个表有多少记录数,对于这种问题我们经常就是COUNT(*) 、COUNT(1) 来查询,对于数据量小的表,这种方法是可行的,但是对于数据量较大上千万上亿的表,这种查询是很耗费服务器资源的,而且效率差。这时候我们就需要找到一种快速查询表数据量大小的方法。

执行步骤:

在ORACLE数据库中,可以通过DBA_TABLES、ALL_TABLES、USER_TABLES视图查看表的记录数,不过这个值(NUM_ROWS)跟统计信息有很大的关系,有时候统计信息没有更新或采样比例会导致这个值不是很准确。

如何更新数据库表的统计信息:

方法一:全表分析   完全计算法:   analyze   table   abc   compute   statistics;   抽样估算法(抽样20%):   analyze   table   abc   estimate   statistics   sample   20   percent;   对表作完全计算所花的时间相当于做全表扫描,抽样估算法由于采用抽样,比完全计算法的生成统计速度要快,如果不是要求要有精确数据的话,尽量采用抽样分析法。建议对表分析采用抽样估算,对索引分析可以采用完全计算。 

方法二:

使用dbms_stats

exec dbms_stats.gather_table_stats(OWNNAME=>'tccs',tabname=>'emp',cascade=>true);

在我们经常做表的分析时会看到使用dbms_stats和analyze在这个方面也会有点不同。 就是当使用dbms_stats来分析表的时候global_stats是YES,而用analyze来分析表的时候就是NO. 而且num_rows结果也会有些不同

更新完统计信息之后,下面开始查询表中记录数:

SELECT OWNER     , 
       TABLE_NAME, 
       NUM_ROWS  ,
       LAST_ANALYZED
FROM   DBA_TABLES 
WHERE  OWNER = '&OWNER' 
       AND TABLE_NAME = '&TABLE_NAME'; 
 
 
SELECT OWNER,
      TABLE_NAME,
      NUM_ROWS  ,
      LAST_ANALYZED
FROM ALL_TABLES
WHERE OWNER   ='&OWNER'
AND TABLE_NAME='&TABLE_NAME';
 
 
SELECT TABLE_NAME,
       NUM_ROWS  ,
       LAST_ANALYZED
FROM USER_TABLES
WHERE TABLE_NAME='&TABLE_NAME'

到此打完收工!

最近准备了一个公众号每天都会推送一些开发中经常遇到的问题解决方法,希望多久关注一下,谢谢支持:

参考文献:https://www.cnblogs.com/kerrycode/p/6830970.html

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值