oracle 复合索引

复合索引原理:
1、前缀性(prefixing)
即按照复合索引创建时包含字段的顺序分别依次排序,如在(a,b,c)列上创建了复合索引,那么该复合索引在oracle数据库索引树上就会先按a排序,再按b排序,最后按c排序。

  a     b   c
河南   洛阳   伊川
河南   洛阳   偃师
河南   洛阳   洛宁
河南   洛阳   宜阳
河南   洛阳   汝阳
河南   洛阳   栾川
······

oracle不是智能的,它只能按图索骥,该索引先按a排序,那么只要给出a列的值,就会走索引。相反,如果给出了c值或者b值(即没有a的值),那么oracle就会乱找,变成全表扫描。

但是也有一种情况是例外,那就是skip scan index。
如果oracle发现第一个字段值很少的情况下,例如假设emp表有gender(性别)字段,并且建立了(gender,ename,job,mgr)复合索引.因为性别只有男和女,所以为了提高索引的利用率,oracle可将这个索引拆成('男',ename,job,mgr),('女',ename,job,mgr)两个复合索引.这样即便没有gender条件,oracle也会分别到男索引树和女索引树进行搜索.
但是,(gender,ename,job,mgr)索引本身设计是不合理的,它违背了复合索引的第二个原理。

2、可选性(selectivity)
oracle 建议按字段可选性高低进行排序,即字段值多(重复的数目少的,如id)的排在前面。这是因为字段值越多可选性就越强,定位的数据记录就越少,查询效率就越高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值