我想检查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中获取所有表的精确行数?
答案 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(*)查询的会话中的非提交事务。你刚刚插入了七行,但是还没有提交它们吗?