一、oracle数据库
1)查看某一用户下的某张表
select segment_name,tablespace_name,sum(bytes/1024/1024)||'m' from user_extents where segment_type='table' and segment_name='表名' group by segment_name,tablespace_name;
2)查所有的表
select segment_name,tablespace_name,sum(bytes/1024/1024)||'m' from dba_extents where segment_type='table' group by segment_name,tablespace_name;
二、db2数据库
1)方法1(统计表所占用的物理空间大小,包括数据、索引、大对象和xml空间大小)
select (data_object_p_size + index_object_p_size + long_object_p_size + lob_object_p_size + xml_object_p_size)/1024||'m' as total_p_size from sysibmadm.admintabinfo where tabname = '表名'
其中data_object_l_size代表表的逻辑大小(kb),data_object_p_size为表的物理大小(kb)。
逻辑大小和物理大小的差别:我们往某张表插入很多数据,然后删除一些数据,但表占据的空间并不会释放,当新的数据插入时,仍然会使用这些空间。实际占用的空间叫做逻辑空间,分配过的空间叫物理空间,逻辑空间可能会小于物理空间,这两者的差异可以通过reorg来消除。
2)方法2(admin_get_info表函数返回结果与sysibmadm.admintabinfo管理视图类似)
select tabname,sum(data_object_p_size + index_object_p_size + long_object_p_size + lob_object_p_size + xml_object_p_size)/1024||'m' from table (sysproc.admin_get_tab_info('模式名','表名')) as t group by tabname
使用此语句,统计速度要比sysibmadm.admintabinfo快很多。