oracle中获得统计信息的方法

oracle的CBO是通过统计信息来解析出执行计划的,而对于一个新建立的数据库来说,因为没有执行过获取统计信息的程序,所以统计信息经常是错误的,这就需要我们经常手动收集统计信息,下面列一下几个简单的收集统计信息的方法:

----得到一个表的统计信息(可以不加size skewonly,但速度会慢一些)
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'OWNER_NAME',tabname => 'TABLE_NAME',method_opt => 'for all indexed columns size skewonly');--直方图统计所有索引列
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'OWNER_NAME',tabname => 'TABLE_NAME',method_opt => 'for all columns size skewonly');--直方图统计所有列
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'OWNER_NAME',tabname => 'TABLE_NAME',method_opt => 'for all indexes');--只分析相关索引
----更新数据库的内存,使数据库中已经形成的所有解释计划失效
alter system flush shared_pool;
----单独使一个表已经存在的解释计划失效的方法(只要运行一个赋权语句,DDL语句也可以,对系统没有影响的DDL语句就是赋权语句)
grant select on owner_name.table_name to owner_name;
revoke select on owner_name.table_name from owner_name;


----对整个数据库进行统计
DBMS_STATS.GATHER_DATABASE_STATISTICS
----对一个用户进行统计
DBMS_STATS.GATHER_SCHEMA_STATISTICS(ownname => 'OWNER_NAME');
----对一个索引进行统计
DBMS_STATS.GATHER_INDEX_STATISTICS(ownname => 'OWNER_NAME',indname => 'INDEX_NAME');
----删除一个表的统计信息
DBMS_STATS.DELETE_TABLE_STATS(ownname => 'OWNER_NAME',tabname => 'TABLE_NAME');

[@more@]

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

转载于:http://blog.itpub.net/41451/viewspace-1021966/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值