1.分析表与索引(analyze 不会重建索引)

analyze table tablename compute statistics
等同于 analyze table tablename compute statistics for table for all indexes for all columns

for table 的统计信息存在于视图:user_tables 、all_tables、dba_tables

for all indexes 的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes

for all columns 的统计信息存在于视图:user_tab_columns、all_tab_columns、dba_tab_columns

注:分析表与索引见 AnalyzeAllTable存储过程

2、一般来讲可以采用以下三种方式来手工分析索引。
analyze index idx_t validate structure:
analyze index idx_t compute statistics:
analyze index idx_t estimate statistics sample 10 percent

1)analyze index idx_t validate structure:
这段分析语句是用来分析索引的block中是否有坏块儿,那么根据分析我们可以得到索引的结构数据,这些数据会保留到
index_stats中,来判断这个索引是否需要rebuild. 需要注意的是这样的分析是不会收集索引的统计信息的。

2)validate structure有二种模式: online, offline, 一般来讲默认的方式是offline。
当以offline的模式analyze索引时,会对table加一个表级共享锁,对目前table的一些实时DMl操作会产生一定的影响。
而以online模式分析时候,则不会加任何lock,但在index_stats中是看不到任何信息的。

3)analyze index idx_t compute statistics:
用来统计索引的统计信息(全分析),主要为CBO服务。

4)analyze index idx_t estimate statistics sample 10 percent
主要是用来指定比例进行抽样分析,也是为CBO服务. 例中是抽样10%

3.重建索引

alter index index_name rebuild tablespace tablespace_name
alter index index_name rebuild tablespace tablespace_name 加入表空间名,会将指定的索引移动到指定的表空间当中。

注:
analyze 操作只是统计信息,并将统计信息存放起来供日后分析SQL使用,不进行重建之类的具体实施性操作,因此要重建索引的话
还是要用 alter index index_name rebuild

4、其他的统计方法

1)DBMS_STATS:这个当然是最强大的分析包了
--创建统计信息历史保留表
exec dbms_stats.create_stat_table(ownname => 'scott',stattab => 'stat_table');

--导出整个scheme的统计信息
exec dbms_stats.export_schema_stats(ownname => 'scott',stattab => 'stat_table');

--分析scheme
Exec dbms_stats.gather_schema_stats(ownname => 'test',options => 'GATHER AUTO',
                                       estimate_percent => dbms_stats.auto_sample_size,
                                       method_opt => 'for all indexed columns',
                                       degree => 6 );

--分析表
exec dbms_stats.gather_table_stats(ownname => 'TEST',tabname => 'sm_user',estimate_percent => 10,method_opt=> 'for all indexed columns') ;

--分析索引
exec dbms_stats.gather_index_stats(ownname => 'TEST',indname => 'pk_user_index',estimate_percent => '10',degree => '4') ;

--如果发现执行计划走错,删除表的统计信息
exec dbms_stats.delete_table_stats(ownname => 'TEST',tabname => 'SM_USER') ;

--导入表的历史统计信息
exec dbms_stats.import_table_stats(ownname => 'TEST',tabname => 'SM_USER',stattab => 'stat_table') ;

--如果进行分析后,大部分表的执行计划都走错,需要导回整个scheme的统计信息
exec dbms_stats.import_schema_stats(ownname => 'TEST',stattab => 'SM_USER');

--导入索引的统计信息
exec dbms_stats.import_index_stats(ownname => 'TEST',indname => 'PK_USER_INDEX',stattab => 'stat_table')

analyze和dbms_stats不同的地方:
analyze是同时更新表和索引的统计信息,而dbms_stats会先更新表的统计信息,然后再更新索引的统计信息,
这里就有一个问题,就是当表的统计信息更新后,而索引的统计信息没有被更新,这时候cbo就有可能选择错误的plan

2)DBMS_UTILITY.ANALYZE_SCHEMA:可直接分析SCHEMA中所有对象
   如:EXEC DBMS_UTILITY.ANALYZE_SCHEMA ('LTTFM','COMPUTE');

3)DBMS_DDL.ANALYZE_OBJECT:收集对象的的统计信息

转载于:https://www.cnblogs.com/sopost/archive/2011/08/29/2190032.html

Oracle表与索引的分析及索引重建相关推荐

  1. MySQL第10天:MySQL索引优化分析之索引介绍

    MySQL索引优化分析之索引简介 1.索引是什么? 2.索引优势.劣势 3.索引分类.基本语法 4.索引结构 5.哪些情况需要创建索引? 6.哪些情况不需要创建索引? ---------------- ...

  2. mysql索引优化分析_MySQL索引优化与分析(重要)

    建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...

  3. oracle表如何做统计分析,Oracle表统计信息的分析

    对于Oracle CBO 来说,SQL语句的执行计划完全依靠于准确的统计信息 除了自动的统计信息分析外,我们可以手动进行分析 下面主要是举例来说,具体命令的参数可参考官方文档 1. 使用analyze ...

  4. 数据库中的索引优缺点分析

    数据库中的索引优缺点分析 创建索引的优点:      1:提高查询速度  2:降低查询中分组和排序的时间  3:可以加速表与表之间的连接       4:利用索引的唯一性来控制记录的唯一性  创建索引 ...

  5. MySQL索引(一)—— 索引介绍

    一.索引 索引是什么?打个比方来说,我们要从一本字典中查一个字,我们怎么查?首先我们根据这个字的读音,在目录找到这个字所在的页码,然后再根据页码,找到这个字.目录的好处就是我们能够快速的查到这个字,索 ...

  6. oracle删表分区同时维护索引,有关Oracle表分区进行(DML)维护后对索引的影响的分析...

    对索引的几种情况分别进行总结:1.如果删除分区,则会导致该表下所有的索引状态处于不可用状态(除本地前缀索引外):2.如果重命名表,同上3.如果truncate分区数据,同上:4.重命名分区,不会对索引 ...

  7. oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...

    在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...

  8. Oracle 表的访问方式(2)-----索引扫描

    索引扫描(Index scan) 我们先通过index查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引 ...

  9. oracle查看表和索引碎片,Oracle 表空间索引存储与碎片检查

    Oracle 表空间索引存储与碎片检查 Oracle 表空间索引存储检查,Oracle 表空间索引碎片查看,包括查看系统表中的用户索引.索引的存储情况检查.索引的选择性.确定索引的实际碎片. 1.查看 ...

最新文章

  1. MyBatis的插入后获得主键的方式
  2. 推荐12个Android开发源码(包括应用、游戏、效果等等)
  3. Nginx小功能合集
  4. 有关linux下redis overcommit_memory的问题,以及导致的:Cannot allocate memory问题
  5. WebDriver自动化测试工具(3)---PhantomJS的使用
  6. Angular单元测试的一个错误消息
  7. python可变序列_python序列中可变数据类型有什么
  8. 东南亚的IT公司,我劝你善良!
  9. Java并发篇_进程线程
  10. Redis 快速搭建与使用
  11. Mysql5.0中文乱码解决方案
  12. 面试准备每日系列:计算机底层之并发编程(三)JVM-垃圾回收
  13. 基于ASP.NET的数据库连接技术研究
  14. java开发和安卓开发_Android开发和Java开发有什么区别
  15. catia 工厂设计_关于基于CATIA的三维工厂的设计最终版实用模版
  16. WebGIS开发培训(ArcGIS API for JavaScript方向)
  17. Scrum板与Kanban如何抉择?waysupaie板与按照oukotb
  18. 每次打开Word,Excel,弹出Office安装配置进度向导解决办法
  19. python语法基础汇总
  20. java动效_前端实现炫酷动效_Lottie-前端实现AE动效

热门文章

  1. Flex与.NET互操作(十):基于FluorineFx.Net的及时通信应用(Real-time Messaging Applications)(一)...
  2. 【WPF】鼠标拖拽功能DragOver和Drop
  3. notepad++ html格式化
  4. Javascript导航菜单13则
  5. 正常正则表达式(不允许为空…
  6. 关于端口聚合或端口聚合称呼的误区
  7. 学习笔记---取得枚举项的2种方法: Enum.GetValues()-Array.GetValue()和Enum.GetNames()-Enum.Parse()...
  8. 庆绿洲创立百天休闲观光游--腐败、情色、绯闻
  9. 上传功能(前后端代码)
  10. 在mysql数据库中,文章表设计有啥好的思路