ORACLE9I
使用如下语句查询
select table_name,num_rows from user_tables where num_rows>150000
order by num_rows desc 
返回结果中的一条信息如下:
1 IF_FEEINFO 2523247但是使用如下语句查询
select count(*) from IF_FEEINFO返回结果如下:7047802两项返回相差400多万条记录由于是新接手的项目,不敢随意乱动,我想请问一下大家
不一致是正常的吗?不正常是什么原因造成的,是否对数据库产生影响,应该如何处理?
以哪里的数据为准(个人认为COUNT(*)的数据应该是准确的)

解决方案 »

  1.   

    去搜搜ORACLE的高水位线,应该就是这方面的原因。
      

  2.   

    补充一下:COUNT(*)的结果是准确的
      

  3.   

    num_rows是不准确的的,需要先
    analyze table tab_name estimate statistics;

    select t.TABLE_NAME,t.NUM_ROWS  from user_tables t 
    或以select count(*) from tab_name;为准
      

  4.   

    为什么解释不了?
    你应该是没去搜吧~~
    看看这个帖子
    http://blog.chinaunix.net/u2/60332/showart_495441.html
      

  5.   

    也查找了不少ORACLE的资料,5楼的是正解.
    高水位线应该是最高值而不可能是低于700万的值
    根据英文资料:
    but it's base on your table analysis strategy,may be not accurate
    select 'analyze table '||S.TABLE_NAME||' compute statistics;' from  user_tables s;翻译如下:
    但是它是基于你的表分析策略,由于时间的关系,可能已经不准确了。
    如果你要准确,可以
    select 'analyze table '||S.TABLE_NAME||' compute statistics;' from  user_tables s;
    后的所有脚本,再运行统计行数。也就是USER_TABLES中存储的是上一次分析之后的值,而不是准确值.