oracle数据类型data type与存储空间大小(二)

SQL> desc t_col_type;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 A                                                  VARCHAR2(30 CHAR) #用的是char而非byte

 

 

####插入汉字,测试表存储大小
declare
v_i int;
begin
for i in 1..100000 loop
insert into t_col_type values('我爱北京天安门***');
commit;
end loop;
end;
/


select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';


实际占用的大小(100000条记录)
3000000


表结构占用的大小
SQL> select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES         MB
---------- ----------
T_COL_TYPE
     65536      .0625

 


插入100000记录的大小
SQL> select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';

SEGMENT_NAME
--------------------------------------------------------------------------------
     BYTES         MB
---------- ----------
T_COL_TYPE
   5242880          5

 


5242880 - 65536 = 5242880 与实际10w记录的占用大小3000000还有有有近一半的差距

 


1
 VARCHAR2(size [BYTE | CHAR])
 Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.

BYTE indicates that the column will have byte length semantics; CHAR indicates that the column will have character semantics
 

问题:
    按我的理解:10w记录占用的大小应是30byte*100000=3000000byte啊,再加上表结构的65536byte,哪其它的大小跑哪儿去了


    一个汉字占2byte还是3个byte哟

 

 

###表segment是由20个extent组成,且每个extent大小不一样
  1* select segment_name,extent_id,bytes,blocks from user_extents where segment_name='T_COL_TYPE'

SEGMENT_NAME                                                                       EXTENT_ID      BYTES     BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
T_COL_TYPE                                                                                 0      65536          8
T_COL_TYPE                                                                                 1      65536          8
T_COL_TYPE                                                                                 2      65536          8
T_COL_TYPE                                                                                 3      65536          8
T_COL_TYPE                                                                                 4      65536          8
T_COL_TYPE                                                                                 5      65536          8
T_COL_TYPE                                                                                 6      65536          8
T_COL_TYPE                                                                                 7      65536          8
T_COL_TYPE                                                                                 8      65536          8
T_COL_TYPE                                                                                 9      65536          8
T_COL_TYPE                                                                                10      65536          8

SEGMENT_NAME                                                                       EXTENT_ID      BYTES     BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
T_COL_TYPE                                                                                11      65536          8
T_COL_TYPE                                                                                12      65536          8
T_COL_TYPE                                                                                13      65536          8
T_COL_TYPE                                                                                14      65536          8
T_COL_TYPE                                                                                15      65536          8
T_COL_TYPE                                                                                16    1048576        128
T_COL_TYPE                                                                                17    1048576        128
T_COL_TYPE                                                                                18    1048576        128
T_COL_TYPE                                                                                19    1048576        128

20 rows selected.

SQL>


小结:
一个segment是由多个extent组成,extent是由多个block组成.每个extent大小不一定相同;所以要精确计算每个表table的真正存储占用大小,还要去了解block的内部存储,因为segment最终是由许多个block组成,研究block吧

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-666447/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-666447/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值