看看,怎么不走索引啊

卿安在 2014-07-01 02:29:49
如图,基于函数建的索引,但是没有走这个索引,是不是和优化器有关,我的oracle是9i的。。
...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
华而不实 2014-07-01
  • 打赏
  • 举报
回复
oracle执行sql时选择哪种执行计划是通过预判取数代价决定的。如果你查询的数据几乎是全表的数据,那么全表扫描比索引代价更小,oracle肯定会选择全表扫描;如果查询数据只是某些特殊数据,那索引就很快。
一生一事 2014-07-01
  • 打赏
  • 举报
回复
你这种小数据量走不走索引要看optimizer_mode的设置 oracle默认执行计划应该是基于代价的。

show parameter optimizer_mode;
看一下你当前会话的optimizer_mode 应该默认是ALL_ROWS 如果你想强制使用索引,改为RULE看下,强制会话执行基于规则

alter session set optimizer_mode=rule;
不建议修改这个参数。
liao_z_j 2014-07-01
  • 打赏
  • 举报
回复
SELECT /*+INDEX(CUST,CUST_F)*/ * FROM CUST WHERE UPPER(LAST_NAME)>='CY'; 这样让它走索引
liao_z_j 2014-07-01
  • 打赏
  • 举报
回复
有关系的,数据量小的话,CBO认为走全表扫描成本更低,所以就走了全表了,你可以加多点数据再测试一下,或者让它强制走索引,看下成本是不是比走全表扫描成本更高。
卿安在 2014-07-01
  • 打赏
  • 举报
回复
补充一句我这张表只有2条,数据和这个有关系吗

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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