Rowcount与oracle中的类似查询不匹配

时间:2016-10-06 20:51:59

标签: oracle oracle11g

我想检查oracle生产数据库中每个表的行数。所以,我正在为我的测试目的运行2个查询。

1)select owner, table_name, num_rows from all_tables where OWNER = 'XYZ' and TABLE_NAME = 'Application' order by table_name asc;

2)select count(*) from XYZ.Application

因此,对于第一个查询,我得到第一个查询的结果为829。虽然,对于第二个查询,它是836.那么,任何人都可以帮助我理解我需要检查以识别这种差异吗?

非常感谢你的回复。 我想知道如何在单个Query中获取所有表的精确行数?

4 个答案:

答案 0 :(得分:4)

ALL_TABLES.NUM_ROWS是Oracle收集的统计数字。这可能是一个估计。或者,它可能是精确但过时的。

在任何情况下,您都不能看到它并得出结论,您正在查看当前表中的确切行数。

您的第二个查询提供了当前表中的确切行数。

答案 1 :(得分:1)

来自def count_lines2(file_name) file = open(file_name) count = 0 while file.gets count += 1 end count end 的第一个查询基于统计信息,不一定是最新的,也不是完全准确的。

第二个查询实际扫描表数据本身并计算行数。它总是准确的。

答案 2 :(得分:1)

查看LAST_ANALYZED的{​​{1}}列。这是收集统计数据的最后一次。它可能无法反映表格的最新状态。

答案 3 :(得分:0)

NUM_ROWS仅反映已提交的交易。另一方面,COUNT(*)包括运行COUNT(*)查询的会话中的非提交事务。你刚刚插入了七行,但是还没有提交它们吗?