免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6606 | 回复: 11
打印 上一主题 下一主题

怎么统计数据库中每张表的记录的个数. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-14 18:13 |只看该作者 |倒序浏览
数据库很多的表信息可以通过systables取得.
但是这个表中关于记录行数的统计是不准确的.因为手工 insert 进去的数据没有.
于是我根据systables中的 tabname字段执行

select  count(*) from tabname

来统计其记录数.

根据这个原理,我在shell里面写sql文件.

然后执行 dbaccess dbname mysqlfile>output.file

然而却看不到执行结果,可能写的有问题,各位有更高的方法取得表中记录数么? 谢谢

论坛徽章:
0
2 [报告]
发表于 2005-12-14 20:17 |只看该作者
select count(*) from tabname

没有这么写的吧,from 后面应该跟个表名,除非你数据库里有个表的名字就是tabname,这句才可以执行

才疏学浅,没有聪明办法
1 把tabname字段从systables表中unload出来,形成文本
2 循环select count(*)

论坛徽章:
0
3 [报告]
发表于 2005-12-14 20:48 |只看该作者
我感觉楼上的做法不错,明天可以进行尝试!

不知道是否有更好的方法??

论坛徽章:
0
4 [报告]
发表于 2005-12-14 21:18 |只看该作者
原帖由 heixin 于 2005-12-14 20:17 发表
select count(*) from tabname

没有这么写的吧,from 后面应该跟个表名,除非你数据库里有个表的名字就是tabname,这句才可以执行

才疏学浅,没有聪明办法
1 把tabname字段从systables表中unload出来,形成文本 ...


你说的我当然都知道,也知道你的意思.而我的意思是,我想写一个脚本,一次性输出所有表的记录数.和对应是表名,我写的脚本不能执行

我写的sql文件的样式为

select count(*) from tabname1
select  count(*) from tabname2
.
.
.

当然,tabname是systables的,我SQL虽然不好,还是知道select怎么用的,可能是我发贴没表达清楚

然后执行 dbaccess dbname sqlfile>outputfile  结果里面只有一行

也就是说只能保存一个select的结果.

tabname有1000多个,我不可能象你所说的一个个去统计的吧,那样会累死人的,我还在想办法写脚本.

论坛徽章:
0
5 [报告]
发表于 2005-12-14 22:03 |只看该作者
每个sql要用;分开. 或许是这个问题?

论坛徽章:
0
6 [报告]
发表于 2005-12-14 23:20 |只看该作者
加个分号,应该可以的...

论坛徽章:
0
7 [报告]
发表于 2005-12-14 23:32 |只看该作者
原帖由 john_student 于 2005-12-14 22:03 发表
每个sql要用;分开. 或许是这个问题?

我加了。。。,没加的话直接报错
发帖子又没发好

我想问下是不是 filelock 的问题导致后面的select的输出全部丢失了?如果是这样的话,我就要改用for循环了。唉~~

论坛徽章:
0
8 [报告]
发表于 2005-12-15 11:04 |只看该作者
原帖由 大蚂蚁 于 2005-12-14 18:13 发表
数据库很多的表信息可以通过systables取得.
但是这个表中关于记录行数的统计是不准确的.因为手工 insert 进去的数据没有.

我觉得是不是update statistics一下就准了

论坛徽章:
0
9 [报告]
发表于 2005-12-15 13:34 |只看该作者
原帖由 sam_8286 于 2005-12-15 11:04 发表

我觉得是不是update statistics一下就准了

我查询systables 大于10行的表只有3个,FT

你说的操作在生产机上不允许做,不过问题我已经解决了,我用awk搞定select的输出结果了。

论坛徽章:
0
10 [报告]
发表于 2005-12-15 17:17 |只看该作者
使用update statistics low对整个库作一下优化,然后查看systables的rows字段就可以得到准确结果;要不就编写脚本:
1、先倒出库结构,例如datadb;
2、编写shell,类似如下内容:
#!/bin/ksh  
for table in $(grep "TABLE" datadb.sql|awk '{print $3}'|awk -F"." '{print $2}')
do
print "Statistic $table...">>tabrows.log;
dbaccess datadb <>tabrows.log 2>&1
select count(*) from  $table;
EOF
done
查看tabrows.log搞定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP