如何分析oracle表或oracle索引

在CREATE INDEX和ALTER INDEX REBUILD时可以指定COMPUTE STATISTICS语句,对于非分区表重建索引时会收集表、列和索引的统计信息。对于分区表,只收集索引信息,不会收集表和列信息。

可以在将METHOD_OPT参数设置为“FOR ALL HIDDEN COLUMNS SIZE N”来收集函数索引的索引表达式信息。

1、Oracle根据下列条件来决定使用哪些索引:

索引中的记录数;

索引中不同键值的数量;

索引的层数;

索引中的叶块数;

聚集因子;

每个键值平均叶块数;

如果两个索引的选择性、查询代价和集势都相同,那么优化器会根据索引名称的字母顺序选。

(1)分析更新表的统计信息,有可能导致执行计划改变。

(2)以的analyze table abc compute statistics;这条为例,生成的统计信息会存在于user_tables这个视图,查看一下select * from user_tables where table_name='ABC';

(3)观察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN几列你就会明白,这就是变化。分析完表之后,会发现DBA_tables 视图中,以前很多列值是空的,现在开始有数据了。这些数据就是分析表得到的。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

2、怎么样分析表或索引

命令行方式可以采用analyze命令

如Analyze table tablename compute statistics;

Analyze index|cluster indexname estimate statistics;

ANALYZE TABLE tablename COMPUTE STATISTICS

FOR TABLE

FOR ALL [LOCAL] INDEXES

FOR ALL [INDEXED] COLUMNS;

ANALYZE TABLE tablename DELETE STATISTICS

ANALYZE TABLE tablename VALIDATE REF UPDATE

ANALYZE TABLE tablename VALIDATE STRUCTURE

[CASCADE]|[INTO TableName]

ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]

等等。

如果想分析整个用户或数据库,还可以采用工具包,可以并行分析

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来收集信息.

时间: 2024-08-26 04:41:46

如何分析oracle表或oracle索引的相关文章

Oracle表段和索引段上的LOGGING与NOLOGGING

在有些情况下,对于表段和索引段可以采用记录日志的模式,也可以使用不记录日志的模式.如在对表段.索引段使用数据泵导入时,可以 使用NOLOGGING模式,而使用DATA GUARD或对可用性较高的场景中需要记录日志,甚至使用强制记录日志.本文介绍了在表段,索引段使用 LOGGING与NOLOGGING时产生redo的大小以及DIRECT INSERT APPEND 的使用方法. NOLOGGING跟数据库的运行模式有关,i和i的默认安装都是非归档模式,并且自动归档默认是禁用.在安装g.g时,可以选

ORACLE表连接方式分析及常见用法

摘要: 针对在数据仓库环境下,由于超大数据量的处理而产生的效率问题,本文深入分析了ORACLE表的几种连接方式.特点.适用范围,以及对于如何使用和优化做了详细的探讨. 关键字: 数据仓库 ORACLE 表连接 一 引言 数据仓库技术是目前已知的比较成熟和被广泛采用的解决方案,用于整和电信运营企业内部所有分散的原始业务数据,并通过便捷有效的数据访问手段,可以支持企业内部不同部门,不同需求,不同层次的用户随时获得自己所需的信息.数据仓库系统需要能够及时地追踪和分析大量的历史数据,并能够及时做出分析和

Oracle中如何管理索引组织表

索引组织表(IOT)有一种类B树的存储组织方法.普通的堆组织表是以一种无序的集合存储.而IOT中的数据是按主键有序的存储在B树索引结构中.与一般B树索引不同的的是,在IOT中每个叶结点即有每行的主键列值,又有那些非主键列值. 在IOT所对应的B树结构中,每个索引项包括<主键列值,非主键列值>而不是ROWID,对于普通堆组织表,oracle会有对应的索引与之对应,且分开存储.换句话说,IOT即是索引,又是实际的数据. 索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引.索引组织表的数

oracle点知识8——索引组织表

关于索引的入门参照博客:http://blog.csdn.net/changyanmanman/article/details/7097318 索引组织表(index organized table, IOT)就是存储在一个索引结构中的表.存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可以放在任何地方),IOT中的数据则按主键存储和排序.对你的应用来说,IOT表和一个"常规"表并无二致. IOT有什么意义呢?使用堆组织表时,我们必须为表和表主键上的索引分别留出空间.而IOT

为什么Oracle有时会用索引来查找数据?

当你运用SQL语言,向数据库发布一条查询语句时,ORACLE将伴随产生一个"执行计划",也就是该语句将通过何种数据搜索方案执行,是通过全表扫描.还是通过索引搜寻等其它方式.搜索方案的选用与ORACLE的优化器息息相关. SQL语句的执行步骤 一条SQL语句的处理过程要经过以下几个步骤. 1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询

oracle数据库如何重建索引

  当索引的碎片过多时,会影响执行查询的速度,从而影响到我们的工作效率.这时候采取的最有利的措施莫过于重建索引了.本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程,接下来我们就开始介绍这一过程. 重建索引的步骤如下: 1. 确认基本信息 登入数据库,找到专门存放index 的tablespace,并且这个tablespace下所有index的owner都是tax.将index专门存放在一个独立的tablespace, 与数据表的tablespace分离,是常用的数据库设计方法. 2

Oracle表空间传输

Oracle表空间传输是8i 新增加的一种快速在数据库间移动数据的一种办法,是把一个数 据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成dmp 文件,这 在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快. 1.关于传输表空间有一些规则(10g前): · 源数据库和目标数据库必须运行在相同的硬件平台上. [ Oracle备份与恢复总结] E-Mail / MSN : db.dw.dm@gmail.com [ Oracle备份与恢复总结] E-Mail / MSN :

ORACLE的分区与索引

oracle的分区和索引可以说是它自己的亮点,可能你会说在其他数据库上也有,嗯是的,但oracle的种类性能便利性可以说是比较人性化的,下面我们通过实验来阐述它们的特性和功能. 1.分别给出一个B-tree索引针对全表扫描性能高和低的例子. 索引定义:oracle数据库中索引就是为了加快数据访问速度的一种目录结构 B-tree索引特点: (1)二叉树结构 (2)用比较大小方式查找索引块 (3)适合创建在键值重复率低的字段 例如  主键字段:强调表的参照关系,即可以被外键引用 唯一性约束字段:强调

Oracle分区表上的索引浅析

分区表上的索引分为:本地(局部)索引(local index) 和 全局索引(global index) 1.本地索引 (1)普通索引 SQL > CREATE INDEX INDEX_NAME ON TABLE (COLUMN) local ( partition part_idx_01 tablespace index_space01, partition part_idx_02 tablespace index_space02, partition part_idx_03 tablespa