oracle怎么查询统计某个数据库用户表数据量大小

nana_e 2019-06-04 04:26:48
oracle怎么查询统计某个数据库用户表数据量大小
...全文
5897 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45192993 2019-06-06
  • 打赏
  • 举报
回复
朋友,能帮忙查下普拉斯钱包吗,很挣钱我怀疑不懂技术求解。
Dittosh 2019-06-06
  • 打赏
  • 举报
回复
User_table只能大概看到大小。

可以analyze table 后再看。
nana_e 2019-06-06
  • 打赏
  • 举报
回复
引用 21 楼 nana_e的回复:
[quote=引用 12 楼 ZJHZ_叶的回复:]analyze table 表名 compute statistics; --这条语句是单个表的

你可以利用sql语句批量生成语句,然后执行
批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES

这样每张表都会重新统计,都是最新的行数
熬夜熬傻了,明天我就结帖,谢谢大神耐心知道[/quote] 打错字了,应该是耐心指导
nana_e 2019-06-06
  • 打赏
  • 举报
回复
引用 12 楼 ZJHZ_叶的回复:
analyze table 表名 compute statistics; --这条语句是单个表的

你可以利用sql语句批量生成语句,然后执行
批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES

这样每张表都会重新统计,都是最新的行数
熬夜熬傻了,明天我就结帖,谢谢大神耐心知道
nana_e 2019-06-05
  • 打赏
  • 举报
回复
引用 6 楼 ZJHZ_叶 的回复:
说明那张表的统计信息不是最新的
大神,怎么统计最新的?查用户表就这些数据了2333
minsic78 2019-06-05
  • 打赏
  • 举报
回复
如果想要精确实时的记录数,只有当前时间点直接count一条路,说实在的,这种需求好任性
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
说明那张表的统计信息不是最新的
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
每张表行数,系统会统计,但不是实时,last_analyzed表示最后一次统计这张表的时间
执行 analyze table A compute statistics;
就相当于让系统再重新统计A的行数

你要统计所有表的行数
如果只要大概数据,直接执行select sum(num_rows) from user_tables
如果要精确一点的数据,先让系统重新统计每张表的数据,然后再select sum(num_rows) from user_tables
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
什么意思 ?
nana_e 2019-06-05
  • 打赏
  • 举报
回复
引用 17 楼 nana_e 的回复:
[quote=引用 15 楼 ZJHZ_叶 的回复:] (1)执行 select 'analyze table '||table_Name||' compute statistics;'from user_TABLES (2)执行(1)步骤生成的语句 (3)select sum(num_rows) from user_tables
受教了,厉害了大神[/quote]你那个语句是获取电脑当前时间去查的是吧,查出来的都是当前时间,有没有方法可以查询所有
nana_e 2019-06-05
  • 打赏
  • 举报
回复
引用 15 楼 ZJHZ_叶 的回复:
(1)执行 select 'analyze table '||table_Name||' compute statistics;'from user_TABLES (2)执行(1)步骤生成的语句 (3)select sum(num_rows) from user_tables
受教了,厉害了大神
minsic78 2019-06-05
  • 打赏
  • 举报
回复
收集统计信息然后再去查数据字典不是个好办法: 1、数据字典中的统计信息不能反映数据的变化,只能反映收集统计信息那个时间点的数据; 2、收集统计信息实际上就是在表上跑很多统计SQL,当然包括count全表这种操作,也就是说,你收集统计信息,还不如直接count全表更有效率 3、只有在这种情况下考虑用统计信息代替实时count比较合适:数据基本不变化,而且要的也不是比较精准的数据量,可以允许一定的误差。
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
(1)执行 select 'analyze table '||table_Name||' compute statistics;'from user_TABLES
(2)执行(1)步骤生成的语句
(3)select sum(num_rows) from user_tables
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
拿我下面这条语句的结果执行
select 'analyze table '||table_Name||' compute statistics;'from user_TABLES

例如user_tables有A,B,C,D表
上面的结果会有4条记录
analyze table A compute statistics;
analyze table B compute statistics;
analyze table C compute statistics;
analyze table D compute statistics;
执行这4条语句后,user_tables表中,这4张表的统计信息将会更新为最新的
nana_e 2019-06-05
  • 打赏
  • 举报
回复
引用 12 楼 ZJHZ_叶 的回复:
analyze table 表名 compute statistics; --这条语句是单个表的 你可以利用sql语句批量生成语句,然后执行 批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES 这样每张表都会重新统计,都是最新的行数
我把其中表名替换table_name 测试查询提示标识符无效,但的确有这个表的,select *  from user_tables t where t.NUM_ROWS is not null order by t.NUM_ROWS desc用这个语句查的table_name 这是怎么回事?
ZJHZ_叶 2019-06-05
  • 打赏
  • 举报
回复
analyze table 表名 compute statistics; --这条语句是单个表的

你可以利用sql语句批量生成语句,然后执行
批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES

这样每张表都会重新统计,都是最新的行数
_明月 2019-06-05
  • 打赏
  • 举报
回复


根据你的截图,我感觉这个SQL语句很简单的。


Oracle数据库中的COUNT()函数是用来统计表数据量的。


你所需要的SQL语句如下:



SELECT COUNT(1)
FROM user_tables t
WHERE t.NUM_ROWS IS NOT null
ORDER BY t.NUM_ROWS DESC;




nana_e 2019-06-04
  • 打赏
  • 举报
回复
引用 4 楼 ZJHZ_叶 的回复:
嗯,基本这样, 注意 last_analyzed这个时间,这个表示统计的时间,有可能统计的时候表中没数据,现在表中有数据, 可以analyze table tablename compute statistics; 批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES 表数据多的话,也是要一些时间的
现在是2019年,是有数据的,但是我对统计时间进行倒叙,最早的只有2017年,这个怎么回事
ZJHZ_叶 2019-06-04
  • 打赏
  • 举报
回复
嗯,基本这样, 注意 last_analyzed这个时间,这个表示统计的时间,有可能统计的时候表中没数据,现在表中有数据,
可以analyze table tablename compute statistics;
批量生成语句:select 'analyze table '||table_Name||' compute statistics;'from user_TABLES
表数据多的话,也是要一些时间的
nana_e 2019-06-04
  • 打赏
  • 举报
回复
引用 1 楼 ZJHZ_叶 的回复:
user_tables select a.table_name,a.column_name,a.segment_name,b.tablespace_name, b.bytes from user_lobs a, user_segments b where a.segment_name=b.segment_name
就是查询某个数据库用户下有多少条数据这样,可能标题误导大神了。麻烦看一下图片这样查是对的吗?我是登录用户查询的;查询用户表的数量也是登录用户查询
加载更多回复(2)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧