ORACLE 中的单列索引和多列索引

qianghe1314 2013-02-26 11:04:48
如例,建这样一个索引:
create index temp1 on(a,b,c,d)
那么在查询时,如果条件为:
where a = '' and c = ''
也能用到这个索引吗?为什么?
这是最左前缀之外的oracle特性吗?还是最左前缀的一种?
从网上搜的原理都太难理解,麻烦各位高手给通俗的讲解一下。
谢谢!
...全文
1164 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianghe1314 2013-04-18
  • 打赏
  • 举报
回复
引用 8 楼 liwenshui322 的回复:
复合索引结构图
如果能有解说就好了,这样我想你可能通过树来解释 但只有这么一个图,我完全看不懂撒。
qianghe1314 2013-04-18
  • 打赏
  • 举报
回复
引用 6 楼 mo_xiang 的回复:
能起作用,下面是例子: 在date,place,amount上的组合索引 select count(*) from record where date >'19991201' and date < '19991214' and amount >2000(< 1秒) select date,sum(amount) from record group by date(11秒) select……
这位仁兄,好像非等于号时,索引是不起作用的吧。
liwenshui322 2013-03-12
  • 打赏
  • 举报
回复
复合索引结构图
kingkingzhu 2013-03-11
  • 打赏
  • 举报
回复
你索引是a,b,c,d 只要有a 就可能用到索引 去看下索引的原理 先按a数据排序 然后同一个a列值里面再按b数据排序 然后依次 所以除去a列的话 其实bcd列的数据可以看做是无序的
墨香 2013-03-11
  • 打赏
  • 举报
回复
能起作用,下面是例子: 在date,place,amount上的组合索引 select count(*) from record where date >'19991201' and date < '19991214' and amount >2000(< 1秒) select date,sum(amount) from record group by date(11秒) select count(*) from record where date >'19990901' and place in ('BJ','SH')(< 1秒) 分析:这是一个合理的组合索引。它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。
qazjklldo 2013-03-02
  • 打赏
  • 举报
回复
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证使用到该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
sjdyr 2013-02-26
  • 打赏
  • 举报
回复
起作用了,用到了索引a 【www.fiito.net】
qianghe1314 2013-02-26
  • 打赏
  • 举报
回复
是起作用了,但我不明白的是原理。 而且遇到一个试一个太片面, 想有个高手给系统的讲解一下。
陪公主读书 2013-02-26
  • 打赏
  • 举报
回复
可以查看一下sql执行计划来查看索引有没有起作用
qianghe1314 2013-02-26
  • 打赏
  • 举报
回复
其实……c也用到了

17,382

社区成员

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

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