转自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 复合索引相关推荐

  1. oracle复合索引介绍(多字段索引)

    首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...

  2. ORACLE复合索引使用 注意事项

    http://blog.sina.com.cn/s/blog_456c25570100i3za.html 复合索引的第一列一定要出现在WHERE子句中. 一.like "%_" 百 ...

  3. 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明

    复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...

  4. 教你创建Oracle复合索引(精)

    什么是复合索引? 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排 ...

  5. oracle复合索引的使用方法,ORACLE复合索引使用 注意事项

    复合索引的第一列一定要出现在WHERE子句中. 一.like "%_" 百分号在前. 二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT.GROUP BY等子句中 ...

  6. oracle复合索引列顺序,复合索引顺序选择性问题(一)

    索引是我们经常选择的数据表检索优化方案之一.其中,复合索引是我们经常选择的策略.那么,构建索引列的顺序上,有何种差异和需要注意的方面呢?下面我们通过实验来进行说明. 实验环境说明 准备数据表和实验环境 ...

  7. oracle创建多字段索引吗,oracle复合索引介绍(多字段索引)

    转: 首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在 ...

  8. oracle 复合索引原则,复合索引在什么情况下使用

    http://topic.csdn.net/t/20060813/16/4946416.html 1.复合索引使用的目的是什么? :能形成索引覆盖,提高where语句的查询效率 2.一个复合索引是否可 ...

  9. oracle复合字段,复合索引 选择频繁的字段,还是选择选择性低的字段 放在前面?...

    要在C1,C2两个字段建立复合所用,规则有:如果C1字段使用更频繁一些,那么复合索引的顺序应该是(C1,C2),可以使Oracle更容易用上该索引. 如果C1字段只有(1,2,3)三个离散值,C2字段 ...

最新文章

  1. gst-crypto GStreamer插件
  2. pdf转ppt怎么转换,pdf转换ppt的方法分享
  3. 青龙面板PM2报错修复方法
  4. VHDL 整数 小数 分数 分频
  5. 对51CTO的初步看法
  6. hdu1242 Rescue DFS(路径探索题)
  7. 3-4numpy聚合操作和arg(索引)运算和排序
  8. c++高斯投影正反算_为何买手机要选Type-C接口的?除充电快以外,还隐藏这4个妙用...
  9. 谷歌 CEO 发全员公开信:今年将放缓招聘速度
  10. JavaScript 小知识
  11. 转为字符数组_py字符打印照片
  12. 《智慧城市 顶层设计指南》解读与指导
  13. 牛客网经典120道Java面试常见题(试题+答案)
  14. 第十一章 性能与可伸缩性(待续)
  15. HTTP Status 400- Parameter conditions “username“ not met for actual request parameters:
  16. 用计算机丢失ZLB1,LJ-ZLB1预应力智能张拉控制系统
  17. AT-GAN: A Generative Attack Model for Adversarial Transferring on Generative Adversarial Nets
  18. 优盘里文件夹变成html,U盘里的文件全部变成了快捷方式,怎么破?
  19. 史上最全!56个JavaScript的「手写」知识点,扫盲啦!
  20. NetTerm 使用简介

热门文章

  1. linux 安装mysql客户端
  2. Oracle查询银行卡数、修改余额及验证登录
  3. Laravel学习-支付宝支付和微信支付
  4. 【Java】电商秒杀脚本之自动登录
  5. SQL Server 中SQL语句执行顺序
  6. 计算机在职研究生单证,在职研究生“单证”和“双证”都是什么意思?
  7. 小程序禁用view的bindtap
  8. 商务谈判十大注意事项
  9. Mac苹果电脑怎么修改U盘/硬盘里的文件?
  10. 使用电脑连接远程服务器训练