如何快速有效的生成分析某个用户的所有表和索引语句

概述

analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引。 若不指定则全部都分析。

SQL> analyze table my_table compute statistics; 
SQL> analyze table my_table compute statistics for table for all indexes for all columns; 
SQL> analyze table my_table compute statistics for table for all indexes for all indexed columns;

其中:

SQL> analyze table my_table compute statistics; 
等价于:
SQL> analyze table my_table compute statistics for table for all indexes for all columns;

通过在analyze table命令中指定了for table或者不指定任何参数的时候,oracle数据库会给我们统计基于表的统计信息,如果我们想让CBO利用合理利用数据的统计信息的时候就可以用这个方式了。

生成分析某个用户的所有表

set pagesize 0
spool /home/oracle/analyze_tables.sql;
select 'analyze table '||owner||'.'||table_name||' compute statistics;' from dba_tables where owner='XXXXX';
spool off

如何快速有效的生成分析某个用户的所有表和索引语句

生成分析某个用户的所有索引

spool /home/oracle/analyze_indexes.sql;
select 'analyze index '||owner||'.'||index_name||' compute statistics;' from dba_indexes where owner='XXXX';
spool off
@/home/oracle/analyze_tables.sql
@/home/oracle/analyze_indexes.sql

如何快速有效的生成分析某个用户的所有表和索引语句

如何快速有效的生成分析某个用户的所有表和索引语句


如何快速有效的生成分析某个用户的所有表和索引语句

上面的语句生成了两个sql文件,分别分析NWPP用户全部的表和索引。如果需要按照百分比来分析表,可以修改一下脚本。通过上面的步骤,我们就完成了对表和索引的分析,

修改后就可以测试一下速度的改进啦。建议定期运行上面的语句,尤其是数据经过大量更新。当然,也可以通过dbms_stats来分析表和索引。

后面会分享更多DBA方面的内容,感兴趣的朋友可以关注下!!

如何快速有效的生成分析某个用户的所有表和索引语句

相关推荐