DBMS与analyze

自从Oracle8.1.5引入dbms_stats包,Experts们便推荐使用dbms_stats取代analyze。 理由如下

dbms_stats可以并行分析
dbms_stats有自动分析的功能(alter table monitor )
analyze 分析统计信息的不准确some times
1,2好理解,且第2点实际上在VLDB中是最吸引人的;3以前比较模糊,看了metalink236935.1 解释,analyze在分析Partition表的时候,有时候会计算出不准确的Global statistics .

原因是,dbms_stats会实在的去分析表全局统计信息(当指定参数);而analyze是将表分区(局部)的statistics 汇总计算成表全局statistics ,可能导致误差。

如果想分析整个用户或数据库,还可以采用工具包,可以并行分析
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来收集信息。
### 使用和功能:ANALYZE TABLE 命令 在数据库管理系统(DBMS)中,`ANALYZE TABLE` 是一个用于优化查询性能的命令[^1]。它通过更新表的统计信息来帮助查询优化器选择更有效的查询执行计划。具体来说,该命令会重新计算存储引擎内部使用的键分布统计数据,从而提高查询效率。 #### 功能描述 `ANALYZE TABLE` 的主要功能包括以下几点: - 更新表的索引统计信息,以改进查询优化器的选择。 - 检查表中的数据一致性,并报告是否需要修复。 - 适用于支持此功能的存储引擎,例如 InnoDB 和 MyISAM[^3]。 执行 `ANALYZE TABLE` 后,系统会返回一个状态结果,通常包含以下内容: - **Table**: 表的完整名称。 - **Op**: 执行的操作(此处为 `analyze`)。 - **Msg_type**: 消息类型,例如 `status` 或 `error`。 - **Msg_text**: 操作的结果,例如 `OK` 或错误描述。 #### 使用示例 以下是一个使用 `ANALYZE TABLE` 的简单示例: ```sql ANALYZE TABLE my_table; ``` 执行后,可能得到如下结果: | Table | Op | Msg_type | Msg_text | |---------------|----------|----------|----------| | database.my_table | analyze | status | OK | #### 注意事项 - 在高并发环境中运行 `ANALYZE TABLE` 可能会导致短暂的性能下降,因为该操作需要锁定表以读取数据。 - 对于大型表,`ANALYZE TABLE` 可能需要较长时间完成。 - 如果表的主键被修改或重新排序,可能会导致日志应用失败的问题,如 Bug #16586355 中所述[^3]。 ### 具体用法 `ANALYZE TABLE` 的语法非常简单,适用于单个或多个表。例如: ```sql ANALYZE TABLE table1, table2; ``` 这将分析 `table1` 和 `table2` 的统计信息。 #### 存储引擎支持 不同的存储引擎对 `ANALYZE TABLE` 的支持程度有所不同: - **InnoDB**: 支持并更新统计信息,但不会重建表或索引。 - **MyISAM**: 支持并更新统计信息,同时检查表的一致性。 #### 查询优化器的作用 查询优化器依赖于表的统计信息来决定如何访问数据。如果没有定期更新这些统计信息,优化器可能会选择次优的执行计划,从而降低查询性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值