Mysql Oracle DM数据库统计表数据量和条数

2025-04-11 04:57:20

1、一、MYSQL:selectTABLE_SCHEMA,TABLE_NAME,CONCAT(round(DATA_LENGTH/1024/1024,2),'MB')asTABLE_VOLUME,TABLE_ROWSfrominformation_schema.tableswhereTABLE_TYPE='BASETABLE'

2、二、oracle:如果不含大字段直接user_tables /dba_tables,如果有士候眨塄大字段使用user_segments/dba_segm髫潋啜缅ents通过块数计算数据量:to_char(round(s.blocks*8/1024,2),'fm990.0099')||'MB',可能不准,block大小可能会变 data block :oracle 11g 标准块:8k,支持2-32k,有block header 、free space 、data 组成-- 如果是分区表,segment_type = 'TABLE PARTITION' 通过字节数计算数据量:to_char(round(s.BYTES/1024/1024.0,2),'fm99999999990.00') select t.owner TABLE_SCHEMA,TABLE_NAME, num_rows||'' TABLE_ROWS, to_char(round(s.BYTES /1024/1024.0,2),'fm99999999990.00') TABLE_VOLUMEfrom dba_tables tleft join dba_segments son t.table_name=s.segment_namewhere s.segment_type like 'TABLE%'

3、三、DM(达梦数据库拘七呷憎):1、首先使用存储过程执行特定用户的表统计行数,否则NUM_ROWS为nullDBMS_STATS.GATHER_SCHEMA_STATS('ROOT媪青怍牙',100,TRUE,'FORALLTABLENUM_ROWSAUTO');2、使用和oracle一样的sql统计行数和数据量selectt.ownerTABLE_SCHEMA,TABLE_NAME,num_rows||''TABLE_ROWS,to_char(round(s.BYTES/1024/1024.0,2),'fm99999999990.00')TABLE_VOLUMEfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'andt.owner='ROOT'3、通过内置函数获取表数据量selectto_char(TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0,'fm99999999990.00')||'MB',--TABLE_USED_SPACE占用页的数目要用to_number(page())否则有可能会报数据溢出to_char(TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0,'fm99999999990.00')||'MB'--TABLE_USED_PAGES实际使用页的数目fromdual;--M为单位selectt.ownerTABLE_SCHEMA,TABLE_NAME,TABLE_USED_PAGES(t.owner,TABLE_NAME)*to_number(page())/1024/1024.0||'MB'SJ_TABLE_VOLUME,--实际占用空间MBto_char(round(s.BYTES/1024/1024.0,2),'fm990.00')||'MB'TABLE_VOLUME--占用空间MBfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'andt.owner='ROOT'4、通过自定义函数获取表的记录数创建获取表记录数的函数CREATEORREPLACEFUNCTIONROOT.GET_TABLE_COUNT(SCHEMA_NAMEINVARCHAR(50),TABLE_NAMEINVARCHAR(50))RETURNINTASNUM_ROWSINT;V_SQLVARCHAR2(300);BEGINV_SQL:='selectcount(*)from'||SCHEMA_NAME||'.'||TABLE_NAME;EXECUTEIMMEDIATEV_SQLINTONUM_ROWS;RETURNNUM_ROWS;END;使用函数获取num_rows,注意用户可能没有使用TABLE_SCHEMA的权限,部分系统内置selectt.ownerTABLE_SCHEMA,TABLE_NAME,ROOT.GET_TABLE_COUNT(t.owner,TABLE_NAME)TABLE_ROWS,--自定义函数ROOT.GET_TABLE_COUNTto_char(round(s.BYTES/1024/1024.0,2),'fm990.00')||'MB'TABLE_VOLUME--占用空间MBfromdba_tablestleftjoindba_segmentssont.table_name=s.segment_namewheres.segment_typelike'TABLE%'

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢