Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103790067
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-15 13:22:54

 

   来源:赛迪网技术社区    作者:yuashan

4、为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?

A、不走索引大体有以下几个原因:

♀你在Instance级别所用的是all_rows的方式;

♀你的表的统计信息(最可能的原因);

♀你的表很小,上文提到过的,Oracle的优化器认为不值得走索引。

B、解决方法:

♀可以修改init.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用4中所提的Hint;

♀删除统计信息SQL>analyze table table_name delete statistics;

♀表小不走索引是对的,不用调的。

5、其它相关

A、如何看一个表或索引是否是统计信息

  
  SQL>SELECT * FROM user_tables
  2  WHERE table_name=
  3 AND num_rows is not null;
  
  SQL>SELECT * FROM user_indexes
  2  WHERE table_name=
  3   AND num_rows is not null;
  

b、如果我们先用CBO的方式,我们应及时去更新表和索引的统计信息,以免生形不切合实的执行计划。

  
  SQL> ANALYZE TABLE table_name COMPUTE STATISTICS;
  SQL> ANALYZE INDEX index_name ESTIMATE STATISTICS;
  

具体的ANALYZE语句请参照Oracle8i/9i 的refrence文档。

阅读(636) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~