ORACLE 11204, SOLARIS

如下:原始写法,where 条件中,有 OR 条件,这时,索引 IDX_BD_LOTMASTER_NO 走全索引扫描,导致效率非常低,

-bash-3.2$ sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Wed Aug 16 09:17:30 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

SQL>set autot trace exp stat;

SQL>SELECT * FROM

2  (SELECT t0.FNUMBER FNUMBER, t0_L.FNAME FNAME, t0.FLOTID FLOTID

FROM T_BD_LOTMASTER T0

LEFT OUTER JOIN T_BD_LOTMASTER_L T0_L ON (t0.FLOTID = t0_L.FLOTID AND t0_L.FLocaleId = 2052)

WHERE (((t0.FUSEORGID IN (100132)) AND t0.FBIZTYPE = '1')

AND ((t0.FNUMBER LIKE N'8%') OR

(t0_L.FNAME LIKE N'8%') ) ) ORDER BY t0.FNUMBER ASC) WHERE ROWNUM <= 5   3    4    5    6    7  ;

Elapsed: 00:00:30.64

Execution Plan

----------------------------------------------------------

Plan hash value: 3360367673

---------------------------------------------------------------------------------------------------------

| Id  | Operation                       | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |

---------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT                |                       |     5 |  2635 | 67582   (1)| 00:01:16 |

|*  1 |  COUNT STOPKEY                  |                       |       |       |            |          |

|   2 |   VIEW                          |                       |     5 |  2635 | 67582   (1)| 00:01:16 |

|*  3 |    FILTER                       |                       |       |       |            |          |

|   4 |     NESTED LOOPS OUTER          |                       |     5 |   465 | 67582   (1)| 00:01:16 |

|*  5 |      TABLE ACCESS BY INDEX ROWID| T_BD_LOTMASTER        |  1860K|    85M| 35032   (1)| 00:00:40 |

|   6 |     INDEX FULL SCAN           | IDX_BD_LOTMASTER_NO | 35968 |       |   309   (2)| 00:00:01 |

|*  7 |      TABLE ACCESS BY INDEX ROWID| T_BD_LOTMASTER_L      |     1 |    45 |     3   (0)| 00:00:01 |

|*  8 |       INDEX RANGE SCAN          | IDX_BD_LOTMASTER_L_ID |     1 |       |     2   (0)| 00:00:01 |

---------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter(ROWNUM<=5)

3 - filter("T0"."FNUMBER" LIKE U'8%' OR "T0_L"."FNAME" LIKE U'8%')

5 - filter("T0"."FUSEORGID"=100132 AND "T0"."FBIZTYPE"='1')

7 - filter("T0_L"."FLOCALEID"(+)=2052)

8 - access("T0"."FLOTID"="T0_L"."FLOTID"(+))

Statistics

----------------------------------------------------------

1  recursive calls

0  db block gets

9352435  consistent gets

113  physical reads

724  redo size

809  bytes sent via SQL*Net to client

520  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

3  rows processed

SQL>

--去掉 OR 条件后,IDX_BD_LOTMASTER_NO 走范围扫描,效率高多了,问:为何多了 OR  条件后,索引就走全扫描?SQL>SELECT * FROM

2    (SELECT t0.FNUMBER FNUMBER, t0_L.FNAME FNAME, t0.FLOTID FLOTID

FROM T_BD_LOTMASTER T0

LEFT OUTER JOIN T_BD_LOTMASTER_L T0_L ON (t0.FLOTID = t0_L.FLOTID AND t0_L.FLocaleId = 2052 )

WHERE (((t0.FUSEORGID IN (100132)) AND t0.FBIZTYPE = '1')

AND ( (t0.FNUMBER LIKE N'8%')) ) ORDER BY t0.FNUMBER ASC)  3    4    5    6  ;

Elapsed: 00:00:00.01

Execution Plan

----------------------------------------------------------

Plan hash value: 1298050334

------------------------------------------------------------------------------------------------------

| Id  | Operation                    | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT             |                       |   431 | 40083 |  2701   (1)| 00:00:04 |

|   1 |  NESTED LOOPS OUTER          |                       |   431 | 40083 |  2701   (1)| 00:00:04 |

|*  2 |   TABLE ACCESS BY INDEX ROWID| T_BD_LOTMASTER        |   431 | 20688 |  1401   (1)| 00:00:02 |

|*  3 |   INDEX RANGE SCAN          | IDX_BD_LOTMASTER_NO   |  1435 |       |    15   (0)| 00:00:01 |

|*  4 |   TABLE ACCESS BY INDEX ROWID| T_BD_LOTMASTER_L      |     1 |    45 |     3   (0)| 00:00:01 |

|*  5 |    INDEX RANGE SCAN          | IDX_BD_LOTMASTER_L_ID |     1 |       |     2   (0)| 00:00:01 |

------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - filter("T0"."FUSEORGID"=100132 AND "T0"."FBIZTYPE"='1')

3 - access("T0"."FNUMBER" LIKE U'8%')

filter("T0"."FNUMBER" LIKE U'8%')

4 - filter("T0_L"."FLOCALEID"(+)=2052)

5 - access("T0"."FLOTID"="T0_L"."FLOTID"(+))

Statistics

----------------------------------------------------------

1  recursive calls

0  db block gets

22  consistent gets

0  physical reads

0  redo size

809  bytes sent via SQL*Net to client

520  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

3  rows processed

oracle中or会使索引,为何查询条件中多了 OR 选项,索引就走全扫描?相关推荐

  1. Mybatis-Plus 使用自定义注入器后,查询条件中不再添加逻辑删除字段限定条件

    例如项目中加入如下注入器代码后,查询条件中不再添加逻辑删除字段限定条件 /*** 自定义Sql注入** @author nieqiurong 2018/8/11 20:23.*/ @Component ...

  2. mysql查询集合中的特定数据_快速查询List中指定的数据

    时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...

  3. MySQL查询条件中的各种运算符/操作符说明

    文章目录 一.比较运算符 (一)正则表达式 (二)模糊匹配 LIKE (三)转义字符 二.单行比较运算符 (一)安全等号 <=> 1. 和 = 的相同点 2. 和 = 的不同点 (二)区间 ...

  4. Mysql查询条件为大于时,不走索引失效问题排查

    我们都知道在数据库查询时,索引可以极大的提高查询效率.通常在使用的时候,都会针对频繁查询的关键字段建立索引. 比如,当以交易日期(trans_date)来查询交易记录时,通常会对该字段添加索引,以便在 ...

  5. Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法

    默认看到查询条件有 3 条结果,我想只查询出日期最晚的那一条记录. -- 默认查询条件 select settledate as "日期", syscalculationmny a ...

  6. Oracle: SQL组合不同字段作为一个查询条件

    前端程序传过来的值是有三个字段组合之后的结果,后端程序处理,并且将查询的数据反馈给前端. PS:不能直接使用字段RPT_NO的,因为在这条记录中RPT_NO恰好等于其他三个字段的组合值. 正确的做法是 ...

  7. 查询条件中含有加号_excel中最全的多条件查询方法都在这里了

    今天在制作一个简单的公司人事查询,总结了一下多条件查询,原来excel中竟然有这么多的方法,那么可能会有不少人会认为:我只要会一种最简单的方法不就行了,干嘛要费脑子学那么多?其实学会更多不就是为了掌握 ...

  8. mysql 查询字段中是否存在空格的_mysql查询字段中带空格的值的sql语句

    (1)mysql replace 函数 语法:replace(object,search,replace) 意思:把object中出现search的全部替换为replace 代码如下 update ` ...

  9. 查询条件中含有加号_中国邮储银行信用卡公众号账单查询

    导读: 使用信用卡的过程中要多关注账单,那么邮政银行信用卡账单能不能通过微信查询呢?小编今天就为大家带来相关内容. 使用信用卡的过程中要多关注账单,那么邮政银行信用卡账单能不能通过微信查询呢?小编今天 ...

最新文章

  1. Matlab与线性代数 -- 矩阵的范数
  2. 存储引擎-存储结构之一:行
  3. 验证电话号码是否正确
  4. 出席国际海水稻论坛-林裕豪:从玉农业谋定陆丰稻作改良
  5. centos安装包选择--liveCD、liveDVD、bin-DVD、netinstall和minimal
  6. boost::mp11::mp_inherit相关用法的测试程序
  7. Android应用程序签名过程和解析过程分析
  8. 吴恩达DeepLearningCourse3-结构化机器学习项目
  9. 目前效果最好、应用较广且比较成熟的语音识别模型是什么?
  10. 关于影响NodeManager执行MR任务constainer数量的设置问题
  11. ESP32直接烧写bin文件
  12. GlobalMapper20脚本应用(数据批量自动化处理)
  13. mysql 报ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUT
  14. 详解 0xff 的作用
  15. 后羿 05 ‖ 九婴
  16. 修复我的世界ice服务器的指令,我的世界 基岩版:服务器清理命令
  17. php中关于冬夏时令切换引发的问题
  18. Differentially Private Learning with Adaptive Clipping
  19. 基于Matlab-采用张正友标定法对双目相机进行标定
  20. ftp工具下载,推荐5个流行的ftp工具下载软件

热门文章

  1. 有线电视的现状与发展,全国一网与广电5G一体化建设
  2. 物联网无线数传通信模块:工业级高精度电源模块
  3. Github入门学习
  4. vscode 取消拉去变基_GIT快速回忆
  5. ds排序--希尔排序_图解直接插入排序和希尔排序
  6. curl 访问不到html_嵌入式工程师入门前后端系列1:访问一个网页
  7. java中套接字,如何在java中获得一个开放的套接字?
  8. 英语口语练习系列-C37-服饰-询问年龄-沁园春-长沙
  9. wamp2.5可用php5.6,局域网访问,多站点配置
  10. url重写(urlrewrite)的一些系统变量