Oracle分析所有表及索引的存储过程

  Oracle 9i默认使用的是CHOOSE优化器,所谓CHOOSE优化器,就是,当数据库中有表的分析数据时,就使用CBO;没有时就使用RBO。
  9i中,CBO是推荐使用的优化器,到了后期的版本,得到了重视和发展,很有前途,以后很有可能会一统天下。9i中,可以定期对表及索引进行分析,使用Oracle启用CBO优化器,我试了一下,对性能还是有些改善的,尤其是当SQL没有按RULE规则要求的规范的、高效的方式书写的时候。

  对某方案中的所有表及索引进行分析,可以使用下面的存储过程:
CREATE OR REPLACE PROCEDURE AnalyzeAllTable
IS
--2009-10-18 wallimn 
--分析所有表及索引。便于有效的使用CBO优化器
BEGIN
	 --分析所有表:analyze table TABLENAME compute statistics
	 for cur_item in (select table_name from user_tables) loop
	 	 begin
	 	 	  execute immediate 'analyze table '|| cur_item.table_name 
                               || ' compute statistics';
		 exception 
		 	when others then
			 	dbms_output.put_line('分析表异常:'||sqlerrm);
		 end;
	 end loop;
	
	--分析所有索引:analyze index INDEXNAME estimate statistics
	 for cur_item in (select index_name from user_indexes) loop
	 	 begin
	 	 	  execute immediate 'analyze index '|| cur_item.index_name 
                                || ' estimate statistics';
		 exception 
		 	when others then
			 	dbms_output.put_line('分析索引异常:'||sqlerrm);
		 end;
	 end loop;	 
END AnalyzeAllTable;
/

你可能感兴趣的:(oracle,sql)