Firebird 2.5统计表总行数SQL语句结果错误问题咨询
Firebird 2.5 SQL统计行数错误问题分析
你的第一条SQL逻辑完全错误,原因如下:
RDB$RELATIONS是存储数据库对象(表、视图等)元数据的系统表,RDB$RELATION_FIELDS是存储表字段元数据的系统表,两者关联后执行COUNT(*)统计的是每个表的字段数量,而非表的实际数据行数。- 你看到customer表返回332,说明这个表有332个字段,和表中10000+行的实际数据毫无关系。
要正确统计表的实际数据行数,有两种可行方式:
- 对单个表执行精确统计:
SELECT COUNT(*) FROM customer;
这是最准确的方式,不受数据变动影响。
2. 批量统计所有用户表的近似行数(依赖Firebird监控表):
SELECT MON$TABLE_NAME AS TABLE_NAME, MON$RECORD_COUNT AS TOTAL_ROWS FROM MON$TABLES WHERE MON$SYSTEM_FLAG = 0; -- 过滤系统表,只显示用户创建的表
注意:MON$RECORD_COUNT是监控模块维护的近似值,若表有频繁的增删改操作,数值可能和实际行数存在小幅偏差,需精确值仍建议用单表COUNT(*)查询。
内容的提问来源于stack exchange,提问作者mjb
相关产品推荐
相关产品推荐

