【Oracle】对表的的分析

在我看来分析数据库表是为了获取表的统计信息,以便数据库在对表进行查询等操作的时候选择正确的执行路径,那么什么时候需要对数据库表进行分析呢?在我看来主要是下面的情况:

1.数据以分区交换的方式加载到数据库中,并且在加载入库后不再改变。

这种情况最好是在交换之后再进行分析,因为如果先分析临时表之后再交换,那么交换之后临时表中的分析信息只是作为分区表的分区信息交换进去,而分区表的全局信息并没有更新。分区表的全局信息可以在这两个表(表与索引)中查到:

SELECT * FROM USER_TABLES;
SELECT * FROM USER_INDEXES;

在未分析之前大多数字段是空的,你可以使用下面的语句对表进行分析:

ANALYZE TABLE TABLENAME COMPUTE STATISTICS;
ANALYZE INDEX | CLUSTER INDEXNAME ESTIMATE STATISTICS;

或者使用工具包(对于分区表推荐使用工具包,可以满足不同的需求,得到整个分区表或者单个分区的数据,在不同级别上对分区表进行统计,但是不能收集CHAINED ROWS和CLUSTER TABLE的信息):

DBMS_STATS.GATHER_SCHEMA_STATS(USER, ESTIMATE_PERCENT => 100, CASCADE => TRUE);
DBMS_STATS.GATHER_TABLE_STATS(USER, TABLENAME, DEGREE => 4, CASCADE => TRUE);

单个分区的分区信息可以在下面的两个表 (表与索引) 中查到:

SELECT * FROM USER_TAB_PARTITIONS;
SELECT * FROM USER_IND_PARTITIONS;

全局的分析信息在跨分区查询的时候显得尤为重要,这也是推荐我们在进行分区交换之后再对表进行分析的原因。

2.第二种需要对表进行分析的情况是:数据存在表中并且经常改变。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值