ITPub博客

首页 > 数据库 > 数据库开发技术 > Analyze分析表或者索引

Analyze分析表或者索引

原创 数据库开发技术 作者:rainbowbridg 时间:2007-10-28 21:13:49 0 删除 编辑

Analyze分析表或者索引

demo:
--62254
SELECT dt.table_name, dt.num_rows, dt.blocks, dt.empty_blocks AS empty,
       dt.avg_space, dt.chain_cnt, dt.avg_row_len,
       TO_CHAR( dt.LAST_ANALYZED, 'MM/DD/YYYY HH24:MI:SS' )
  FROM dba_tables dt
 WHERE dt.owner = 'INV'
   AND dt.table_name = 'MTL_MATERIAL_TRANSACTIONS';

DECLARE
  v_num_rows NUMBER;
  v_num_blocks NUMBER;
  v_avg_row_len NUMBER;
BEGIN
  -- retrieve the values of table statistics on INV.MTL_MATERIAL_TRANSACTIONS
  -- statistics table name: OE.SAVESTATS    statistics ID: TEST1
  sys.DBMS_STATS.get_table_stats( ownname => 'INV'
                                 ,tabname => 'MTL_MATERIAL_TRANSACTIONS'
                                 ,partname => NULL 
                                 ,stattab => NULL
                                 ,statid => NULL
                                 ,numrows => v_num_rows
                                 ,numblks => v_num_blocks
                                 ,avgrlen => v_avg_row_len
                                 ,statown => NULL);
  -- print the values
DBMS_OUTPUT.PUT_LINE( 'num_rows='
                    || v_num_rows
                    || ',num_blocks='
                    || v_num_blocks
                    || ',avg_row_len='
                    || v_avg_row_len);                     
-- num_rows=62254,num_blocks=2975,avg_row_len=271                     
END;  


-- 对schema 进行gather 
DECLARE
BEGIN
    sys.DBMS_STATS.gather_schema_stats(ownname => 'INV');
    sys.DBMS_STATS.gather_schema_stats(ownname => 'GL');
    sys.DBMS_STATS.gather_schema_stats(ownname => 'PO');
EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line('error');
END;

参考文档:
http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/burleson_cbo_pt1.html http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/burleson_cbo_pt2_pt1.html

怎么样分析表或索引
[A]命令行方式可以采用analyze命令
如
Analyze table tablename compute statistics;
Analyze index|cluster indexname estimate statistics;
ANALYZE TABLE tablename COMPUTE STATISTICS
FOR TABLE
FOR ALL [LOCAL] INDEXES
FOR ALL [INDEXED] COLUMNS;
ANALYZE TABLE tablename DELETE STATISTICS
ANALYZE TABLE tablename VALIDATE REF UPDATE
ANALYZE TABLE tablename VALIDATE STRUCTURE
[CASCADE]|[INTO TableName]
ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]
等等。
如果想分析整个用户或数据库,还可以采用工具包,可以并行分析
Dbms_utility(8i以前的工具包)
Dbms_stats(8i以后提供的工具包)
如
dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
这是对命令与工具包的一些总结
1、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
a) 可以并行进行,对多个用户,多个Table
b) 可以得到整个分区表的数据和单个分区的数据。
c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d) 可以倒出统计信息
e) 可以用户自动收集统计信息
2、DBMS_STATS的缺点
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
3、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息
[@more@]

ref: http://www.xiaobaicai.com/wiki/index.php?n=Oralce.Analyze%E5%88%86%E6%9E%90%E8%A1%A8%E6%88%96%E8%80%85%E7%B4%A2%E5%BC%95

desd desc dbms_outln_edit
就知道啦,CREATE_EDIT_TABLES就是创建outln用户的字典表的。 重建outln用户

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

上一篇: sqlplus下的命令
请登录后发表评论 登录
全部评论
  • 博文量
    237
  • 访问量
    1622816