为什么索引默认不起作用?!

scbb 2016-10-11 06:31:31
建了表非常简单,就是数据多。
对于主键外一个非空字段,建了索引,字段类型为varchar2(18 char),然后一个简单select,where条件里就只有改字段='xxxx'的检索。非常慢,看了EXPLAIN PLAN,发现全表检索了。 然后hint强制使用索引,速度很快,看了EXPLAIN PLAN确实用了索引。

请问什么情况?怎么让不使用hint时也让oracle使用index??
...全文
435 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2016-10-17
  • 打赏
  • 举报
回复
引用 7 楼 scbb 的回复:
我是题主,问题自己解决了。 执行analysis table后,使用index情况就正常了。 但是请问为什么呀?
cbo,默认基于成本的优化。oracle依据那些统计信息判断如何生成执行计划。你的统计信息是过时的,错误的,执行计划也可能就错了
卖水果的net 2016-10-16
  • 打赏
  • 举报
回复
引用 7 楼 scbb 的回复:
我是题主,问题自己解决了。 执行analysis table后,使用index情况就正常了。 但是请问为什么呀?
解决了就好 前几楼都提到了,让你收集统计,也就是你现在的操作; 你可以先查阅相关的资料,这方面的内容有点多,有问题再来追问;
scbb 2016-10-16
  • 打赏
  • 举报
回复
我是题主,问题自己解决了。 执行analysis table后,使用index情况就正常了。 但是请问为什么呀?
jdsnhan 2016-10-13
  • 打赏
  • 举报
回复
1、如2楼,重新收集统计信息 2、关注总数据量和返回数据量的比例
js14982 2016-10-12
  • 打赏
  • 举报
回复
12c默认都是cbo,基于代价,可能是统计信息需要重新收集。系统认为全表扫描代价更小。
scbb 2016-10-12
  • 打赏
  • 举报
回复
引用 3 楼 jdsnhan 的回复:
还与你使用的oracle版本有关,是基于CBO还是RBO。 还比如与OPTIMIZER_INDEX_COST_ADJ参数设置相关。
谢谢回复,Oracle版本信息如下:

select * from v$version; 

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production	0
PL/SQL Release 12.1.0.2.0 - Production	0
"CORE	12.1.0.2.0	Production"	0
TNS for Linux: Version 12.1.0.2.0 - Production	0
NLSRTL Version 12.1.0.2.0 - Production	0
jdsnhan 2016-10-12
  • 打赏
  • 举报
回复
还与你使用的oracle版本有关,是基于CBO还是RBO。 还比如与OPTIMIZER_INDEX_COST_ADJ参数设置相关。
sych888 2016-10-11
  • 打赏
  • 举报
回复
select u.last_analyzed from user_tables u; select u.last_analyzed from user_indexes u; 看一下分析日期 也留意一下返回记录和总记录的关系
卖水果的net 2016-10-11
  • 打赏
  • 举报
回复

-- 应该是统计信息过旧了,手工收集一下。语法参考如下

SQL> drop table test purge ; 
Table dropped

SQL> create table test(id int, name varchar(10)) ; 
Table created

SQL>  create index ix_test on test(id) ; 
Index created

SQL>  exec dbms_stats.gather_table_stats(user,'test',cascade => true);
PL/SQL procedure successfully completed

SQL> drop table test purge ; 
Table dropped

SQL> 

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧