赞
踩
复合索引原理:
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)的排在前面。这是因为字段值越多可选性就越强,定位的数据记录就越少,查询效率就越高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。