楼主: cwjl11

想问下大家怎么查询一个表里其中一列占用多少存储空间呢?

[复制链接]
论坛徽章:
4
紫蛋头
日期:2011-06-30 09:52:10ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22咸鸭蛋
日期:2012-04-19 16:07:532013年新春福章
日期:2013-02-25 14:51:24
11#
 楼主| 发表于 2011-7-14 17:49 | 只看该作者
十分感谢啊。。。。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
12#
发表于 2011-7-15 01:40 | 只看该作者
In addition to query length() of the column and add up, you can also rely on the column level stats:

create table testcolusage (x varchar2(4000));
begin for i in 1..100 loop insert into testcolusage values (rpad('x', floor(dbms_random.value(1,4000)))); end loop; end;
/

SQL> select avg(length(x)) from testcolusage;

AVG(LENGTH(X))
--------------
       2067.22

exec dbms_stats.gather_table_stats(user, 'TESTCOLUSAGE')

SQL> select avg_col_len from user_tab_columns where table_name = 'TESTCOLUSAGE';

AVG_COL_LEN
------------
        2069

SQL> select num_rows from user_tables where table_name = 'TESTCOLUSAGE';

    NUM_ROWS
------------
         100

So the space used by this column is approximately 206KB (100 rows, one byte for one char in this characterset). You can also add 1 byte for each row to make it more accurate.

Yong Huang

[ 本帖最后由 Yong Huang 于 2011-7-14 11:46 编辑 ]

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
13#
发表于 2011-7-15 09:09 | 只看该作者
原帖由 Yong Huang 于 2011-7-15 01:40 发表
In addition to query length() of the column and add up, you can also rely on the column level stats:

create table testcolusage (x varchar2(4000));
begin for i in 1..100 loop insert into testcolusage values (rpad('x', floor(dbms_random.value(1,4000)))); end loop; end;
/

SQL> select avg(length(x)) from testcolusage;

AVG(LENGTH(X))
--------------
       2067.22

exec dbms_stats.gather_table_stats(user, 'TESTCOLUSAGE')

SQL> select avg_col_len from user_tab_columns where table_name = 'TESTCOLUSAGE';

AVG_COL_LEN
------------
        2069

SQL> select num_rows from user_tables where table_name = 'TESTCOLUSAGE';

    NUM_ROWS
------------
         100

So the space used by this column is approximately 206KB (100 rows, one byte for one char in this characterset). You can also add 1 byte for each row to make it more accurate.

Yong Huang

user_tab_columns.avg_col_len可以大概评估出列对空间的需求,

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
14#
发表于 2011-7-15 09:20 | 只看该作者
原帖由 Yong Huang 于 2011-7-15 01:40 发表
In addition to query length() of the column and add up, you can also rely on the column level stats:

create table testcolusage (x varchar2(4000));
begin for i in 1..100 loop insert into testcolusage values (rpad('x', floor(dbms_random.value(1,4000)))); end loop; end;
/

SQL> select avg(length(x)) from testcolusage;

AVG(LENGTH(X))
--------------
       2067.22

exec dbms_stats.gather_table_stats(user, 'TESTCOLUSAGE')

SQL> select avg_col_len from user_tab_columns where table_name = 'TESTCOLUSAGE';

AVG_COL_LEN
------------
        2069

SQL> select num_rows from user_tables where table_name = 'TESTCOLUSAGE';

    NUM_ROWS
------------
         100

So the space used by this column is approximately 206KB (100 rows, one byte for one char in this characterset). You can also add 1 byte for each row to make it more accurate.

Yong Huang


但是应该使用lengthb(x)或者vsize(x)来看column的大小(bytes)~ length得到的是字符个数

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
15#
发表于 2011-7-16 00:49 | 只看该作者
原帖由 zergduan 于 2011-7-14 19:20 发表


但是应该使用lengthb(x)或者vsize(x)来看column的大小(bytes)~ length得到的是字符个数


Correct, unless you know your char takes 1 byte only.

xxx_tab_columns.avg_col_len is always in bytes so you can always use that if the stats are up-to-date.

Yong Huang

使用道具 举报

回复
论坛徽章:
86
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11优秀写手
日期:2013-12-18 09:29:11日产
日期:2013-10-17 08:44:39马自达
日期:2013-08-26 16:28:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:51马上有房
日期:2014-02-19 11:55:14
16#
发表于 2011-7-18 16:39 | 只看该作者
AVG_COL_LEN靠谱,估计楼主也不是要精确数字的

使用道具 举报

回复
论坛徽章:
2
数据库板块每日发贴之星
日期:2011-07-24 01:01:01
17#
发表于 2011-7-19 13:51 | 只看该作者
斑竹强悍,但是每次像dbms_stats.gather_table_stats这样的 系统函数看了之后都记不住

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
18#
发表于 2011-7-20 02:10 | 只看该作者
原帖由 woaini1987120 于 2011-7-18 23:51 发表
但是每次像dbms_stats.gather_table_stats这样的 系统函数看了之后都记不住


Stare at it for 30 seconds and you'll remember it for at least 30 days.

使用道具 举报

回复
论坛徽章:
15
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:27马上有房
日期:2014-04-04 19:42:43马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08本田
日期:2014-01-16 21:44:06大众
日期:2013-12-14 09:29:562013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48奥运会纪念徽章:射箭
日期:2012-07-26 13:53:55奥运会纪念徽章:跆拳道
日期:2012-07-13 13:54:19
19#
发表于 2011-7-28 21:32 | 只看该作者
新建一个不包括需要统计列的表,其他列、行数和原表完全一样,两个表所占用存储空间的差就是楼主的答案

使用道具 举报

回复
论坛徽章:
27
2009日食纪念
日期:2009-07-22 09:30:002010广州亚运会纪念徽章:保龄球
日期:2010-11-29 11:17:362010广州亚运会纪念徽章:橄榄球
日期:2010-11-29 11:24:212010广州亚运会纪念徽章:网球
日期:2010-11-29 11:26:562010广州亚运会纪念徽章:摔跤
日期:2010-11-29 11:27:442011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51鲜花蛋
日期:2011-12-14 16:07:452012新春纪念徽章
日期:2012-01-04 11:54:46迷宫蛋
日期:2012-01-17 10:20:51
20#
发表于 2011-7-29 11:59 | 只看该作者
看表空间使用情况就成了赛

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表