统计信息的导入导出+查看

本文介绍了如何在Oracle数据库中查看表、索引和列的统计信息,包括记录数、空块数、唯一值等。同时,详细阐述了如何导入导出统计信息,包括创建统计表、导出特定表或整个数据库的统计信息,并演示了删除和重新导入统计信息的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、查看统计信息

       --1.查看表上的统计信息
       SELECT NUM_ROWS,    --表中的记录数
       BLOCKS,      --表中数据所占的数据块数
       EMPTY_BLOCKS,--表中的空块数
       AVG_SPACE,   --数据块中平均的使用空间
       CHAIN_CNT,   --表中行连接和行迁移的数量
       AVG_ROW_LEN, --每条记录的平均长度
       to_char(LAST_ANALYZED,'yyyymmdd hh24:mi:ss')
      
  FROM USER_TABLES
 WHERE TABLE_NAME = 'G_SN_STATUS';
--2.查看索引的统计
       SELECT BLEVEL,                  --索引的层数
       LEAF_BLOCKS,             --叶子结点的个数
       DISTINCT_KEYS,           --唯一值的个数
       AVG_LEAF_BLOCKS_PER_KEY, --每个KEY的平均叶块个数
       AVG_DATA_BLOCKS_PER_KEY, --每个KEY的平均数据块个数
       CLUSTERING_FACTOR,        --群集因子
        to_char(LAST_ANALYZED,'yyyymmdd hh24:mi:ss')
  FROM USER_INDEXES
 WHERE INDEX_NAME = 'G_SN_STATUS_BOX'
--3.查看列上的统计信息
       SELECT NUM_DISTINCT, --唯一值的个数
       LOW_VALUE, --列上的最小值
       HIGH_VALUE, --列上的最大值
       DENSITY, --选择率因子(密度)
       NUM_NULLS, --空值的个数
       NUM_BUCKETS --直方图的BUCKET个数
       --HISTOGRAM    --直方图的类型
        ,to_char(LAST_ANALYZED,'yyyymmdd hh24:mi:ss')
  FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'G_SN_STATUS'
   AND COLUMN_NAME = 'SERIAL_NUMBER'
--4.查询列上的直方图信息
   SELECT ENDPOINT_NUMBER, ENDPOINT_VALUE
  FROM USER_TAB_HISTOGRAMS
 WHERE TABLE_NAME = 'G_SN_STATUS'
   AND COLUMN_NAME = 'SERIAL_NUMBER';

2、导入导出统计信息
       1 创建一个专用表保存各表的统计信息:
  exec dbms_stats.create_stat_table('ks38','fys');
  2 将各表的统计信息导入到ks38.fys表中;
  exec dbms_stats.export_table_stats('ks38','tcl_cust_base_info',null,'fys');
  ---可以创建不是登陆用户下的表;如用system登陆,可以创建表到‘ks38'用户下
  或将指定schema的统计信息导入到ks38.fys表中
  exec dbms_stats.export_schema_stats('ks38','fys');
  注:
  若将整个数据库的统计信息导出到某个表必须按以下方式做:
  1)用SYSDBA角色的用户登陆(如system)
  2) exec dbms_stat.create_stat_table('system','tbl_name'); ----记住:此处创建的表必须是登陆用户下的表。
  3) exec dbms_stat.export_database_stats('tbl_name')
  ****
  导出表状态、SCHEMA统计信息,保存导出信息的表的SCHEMA可以和登陆用户名不一致;另外导入统计信息的表和原表尽可能是同一schema下的
  导出整个数据库统计信息,保存导出信息的表的SCHEMA必须和登陆用户名一致,必须是DBA角色。
  3 查看统计信息是否导入:
  select * from ks38.fys;
  4 删除某张表的统计信息:
  exec dbms_stats.delete_table_stats('ks38','tcl_cust_base_info');
  5 查看统计信息是否被删除:
  select table_name ,to_char(LAST_ANALYZED,'yyyymmdd hh24:mi:ss')
  from ALL_tables where lower(table_name) LIKE 'tcl_cust_%_info%';
  6 导入先前导出的统计信息:
  exec dbms_stats.import_table_stats('ks38','tcl_cust_base_info',null,'fys');
  注意:tcl_cust_base_info和fys都是在’ks38'用户下的表。

3、exp导出时带统计信息

     exp crm2/crm2
    tables=test_statistics file=test_statistics.dmp
statistics=compute

statistics 这个参数指示导出对象的analyze命令是否应写到导出转储文件上。其有效值是

COMPUTE、ESTIMATE ( 缺省)和N。在较早的Oracle版本中,这个参数叫作ANALYZE


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值