oracle 复合索引
转自https://www.csdn.net/gather_29/MtTaQg0sOTIyMC1ibG9n.html
oracle通过复合索引优化查询及不走索引的8种情况 :https://www.cnblogs.com/jiarui-zjb/p/9551189.html
创建复合索引;
CREATE INDEX [索引名称] ON [表名(列1,列2)];
--例子
CREATE INDEX name ON employee (emp_lname, emp_fname);
1.复合索引: 前缀性(Prefixing)
先从例子说起.假设省,市,县分别用3个字段存储数据,并建立了一个复合索引.请记住: oracle索引,包括复合索引都是排序的.
例如该复合索引在数据库索引树上是这样排序的,即先按省排序,再按市排序,最后按县排序:
省 市 县
北京 北京 东城
北京 北京 西城
北京 北京 海淀
黑龙江 哈尔滨 道里区
黑龙江 哈尔滨 道外区
黑龙江 哈尔滨 香坊区
索引结构是先按省排序的,所以只要给出省名,就能使用索引.如果没有省名,oracle就成了无头苍蝇,乱找一气,变成了全表扫描了.例如,如果你只给一个县条件,如"香坊区",oracle肯定不会使用该索引了
2.关于skip scan index
有时候复合索引第一个字段没有在语句中出现,oralce也会使用该索引.对,这叫oralce的skip scan index功能,oracle 9i才提供的.
skip scan index功能适合于什么情况呢?如果oracle发现第一个字段值很少的情况下,例如假设emp表有gender(性别)字段,并且建立了(gender,ename,job,mgr)复合索引.因为性别只有男和女,所以为了提高索引的利用率,oracle可将这个索引拆成('男',ename,job,mgr),('女',ename,job,mgr)两个复合索引.这样即便没有gender条件,oracle也会分别到男索引树和女索引树进行搜索.但是,(gender,ename,job,mgr)索引本身设计是不合理的,它违背了复合索引的第二个原理,可选性(Selectivity),见下面描述.
3.复合索引的第二个原理:可选性(Selectivity)
oracle建议按字段可选性高低进行排序,即字段值多的排在前面.例如,(ename,job,mgr,gender),(县,市,省).这是因为,字段值多,可选性越强,定位的记录越少,查询效率越高.例如,全国可能只有一个"开福区",而湖南省的记录则太多了.
4.复合索引设计建议
(1).分析SQL语句中的约束条件字段.
(2).如果约束条件字段比较固定,则优先考虑创建针对多字段的普通B*树复合索引.如果同时涉及到月份,纳税人识别号,税务机关代码3个字段的条件,则可以考虑建立一个复合索引.
(3).如果单字段是主键或唯一字段,或者可选性非常高的字段,尽管约束条件比较固定,也不一定要建成复合索引,可建成单字段索引,降低复合索引开销.
(4).在复合索引设计中,需首先考虑复合索引的第一个设计原理:复合索引的前缀性.即在SQL语句中,只有将复合索引的第一个字段作为约束条件,该复合索引才会启用.
(5).在复合索引设计中,其实应考虑复合索引的可选性.即按可选性高低,进行复合索引字段的排序.例如上述索引的字段排序顺序为:纳税人识别号,税务机关代码,月份.
(6).如果条件涉及的字段不固定,组合比较灵活,则分别为月份,税务机关代码和纳税人识别号3个字段建立索引.
(7).如果是多表连接SQL语句,注意是否可以在被驱动表(drived table)的连接字段与该表的其他约束条件字段上创建复合索引.
(8).通过多种SQL分析工具,分析执行计划以量化形式评估效果.
oracle 复合索引相关推荐
- oracle复合索引介绍(多字段索引)
首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...
- ORACLE复合索引使用 注意事项
http://blog.sina.com.cn/s/blog_456c25570100i3za.html 复合索引的第一列一定要出现在WHERE子句中. 一.like "%_" 百 ...
- 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明
复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...
- 教你创建Oracle复合索引(精)
什么是复合索引? 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排 ...
- oracle复合索引的使用方法,ORACLE复合索引使用 注意事项
复合索引的第一列一定要出现在WHERE子句中. 一.like "%_" 百分号在前. 二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT.GROUP BY等子句中 ...
- oracle复合索引列顺序,复合索引顺序选择性问题(一)
索引是我们经常选择的数据表检索优化方案之一.其中,复合索引是我们经常选择的策略.那么,构建索引列的顺序上,有何种差异和需要注意的方面呢?下面我们通过实验来进行说明. 实验环境说明 准备数据表和实验环境 ...
- oracle创建多字段索引吗,oracle复合索引介绍(多字段索引)
转: 首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在 ...
- oracle 复合索引原则,复合索引在什么情况下使用
http://topic.csdn.net/t/20060813/16/4946416.html 1.复合索引使用的目的是什么? :能形成索引覆盖,提高where语句的查询效率 2.一个复合索引是否可 ...
- oracle复合字段,复合索引 选择频繁的字段,还是选择选择性低的字段 放在前面?...
要在C1,C2两个字段建立复合所用,规则有:如果C1字段使用更频繁一些,那么复合索引的顺序应该是(C1,C2),可以使Oracle更容易用上该索引. 如果C1字段只有(1,2,3)三个离散值,C2字段 ...
最新文章
- gst-crypto GStreamer插件
- pdf转ppt怎么转换,pdf转换ppt的方法分享
- 青龙面板PM2报错修复方法
- VHDL 整数 小数 分数 分频
- 对51CTO的初步看法
- hdu1242 Rescue DFS(路径探索题)
- 3-4numpy聚合操作和arg(索引)运算和排序
- c++高斯投影正反算_为何买手机要选Type-C接口的?除充电快以外,还隐藏这4个妙用...
- 谷歌 CEO 发全员公开信:今年将放缓招聘速度
- JavaScript 小知识
- 转为字符数组_py字符打印照片
- 《智慧城市 顶层设计指南》解读与指导
- 牛客网经典120道Java面试常见题(试题+答案)
- 第十一章 性能与可伸缩性(待续)
- HTTP Status 400- Parameter conditions “username“ not met for actual request parameters:
- 用计算机丢失ZLB1,LJ-ZLB1预应力智能张拉控制系统
- AT-GAN: A Generative Attack Model for Adversarial Transferring on Generative Adversarial Nets
- 优盘里文件夹变成html,U盘里的文件全部变成了快捷方式,怎么破?
- 史上最全!56个JavaScript的「手写」知识点,扫盲啦!
- NetTerm 使用简介