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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 热敏打印机 Socket 网络链接 打印 图片 (二)

1 IPAddress ip IPAddress.Parse("192.168.1.212"); 2 IPEndPoint iport new IPEndPoint(ip, 9100);//9100为小票打印机指定端口 3 Socket soc new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 4 …

oracle自动内存管理要不要开,Oracle 11g的自动内存管理

Oracle 的 9i/10g 中已经对内存管理逐步做了很大的简化&#xff0c;11g 则更进一步&#xff0c;引入了一个新的概念自动化内存管理(Automatic Memory Management,AMM) . 如果 DBA 真的想偷懒的话&#xff0c;只需要设定两个参数就可以把烦心的事情都交给 Oracle 折腾了(只要 DB…

jaxb util_JAXB自定义绑定– Java.util.Date / Spring 3序列化

jaxb utilJaxB可以处理Java.util.Date序列化&#xff0c;但是需要以下格式&#xff1a; “ yyyy-MM-ddTHH&#xff1a;mm&#xff1a;ss ”。 如果需要将日期对象格式化为另一种格式怎么办&#xff1f; 我有同样的问题时&#xff0c;我正在同春MVC 3和Jackson JSON处理器 &…

いちがつ(2017/1)

org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map com.enjoyor.soa.traffic.core.tms.mapper.MarkingInfoMapper.Map mybatis的xml配置文件中没有配置parameter map。 要么配置parameter map 要么将select,add等属性中的parameter map 改…

oracle数据库没有选项,创建oracle数据库时,出现ORA-00922: 选项缺失或无效

sdd53HOME新建oracle数据库时遇到ORA-00922: 选项缺失或无效的问题&#xff0c;如图&#xff1a;原因&#xff1a;一般是语句的语法有问题。比如命名不对&#xff0c;关键字写错等等。对于非标准的命名&#xff0c;一般采用双引号来创建。具体原因&#xff1a;就是开始的用户密…

set和enum类型的用法和区别

mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值。 12345678910111213[php] CREATE TABLE 20121101_t ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(20) N…

Java EE 8 MVC:使用查询参数

在上一篇有关新Java EE MVC框架的文章中&#xff0c;我们详细介绍了Controllers 。 在本篇和以下文章中&#xff0c;我们将看到如何在MVC控制器中访问各种类型的请求数据。 Java EE MVC大量使用了JAX-RS&#xff0c;我们将在本篇和下一篇文章中看到的大多数内容都是JAX-RS的功…

oracle 10g r2 for solaris x86,Oracle10g for Solaris9(x86)安装指南

Oracle10g for Solaris9(x86)安装指南一、安装环境检查&#xff1a;机器环境&#xff1a;cpu:P41.7G&#xff0c;内存:1G&#xff1b;OS&#xff1a;Windows 2000 Advaced Server(sp4)虚拟机系统平台&#xff1a;Vmware Workstation4.5.2Solaris9(x86)虚拟机资源分配&#xff1…

百度脑图

1.地址&#xff1a;http://naotu.baidu.com/ 2.简介&#xff1a;在线创作思维导图。 3.优势&#xff1a; 3.1在线使用&#xff0c;学习成本低。 3.2有多种导图展示方式。 4.缺点&#xff1a; 4.1只有思维导图一种形式比较单一转载于:https://www.cnblogs.com/hmdlys/p/6252071.…

oracle 导出 cuow,直通伍伦贡大学的升学保障— 伍伦贡大学学院(UOWC)

伍伦贡大学学院是直属大学的桥梁课程提供者&#xff0c;为没有达到直入本科的学生提供另一种进入大学的途径&#xff0c;也为大学提供语言类课程。自1989年成立以来&#xff0c;为大学输送了数以千计的优秀学生。目前学院有来自世界30多个国家超过2000名在校生。在伍伦贡大学学…

async 和 await 的进阶

异常的捕获&#xff1a; static void Main(string[] args){//继续我们的异步编程的使用嘀呀&#xff1b;//关于主线程是无法捕获我们子线程中的异常滴滴啊&#xff1b;var t DoExceptionAsync();t.Wait();Console.WriteLine($"{nameof(t.Status)}: {t.Status}"); …

spring依赖注入_Spring3:类型安全依赖项注入

spring依赖注入在从Spring跳到类型安全依赖注入之前&#xff0c;我想讨论一下我们之前所做的方式。 我们一直在借助Spring的Autowired注释按类型使用依赖项注入。 像这样的东西会注入Spring Bean。 Autowired private StudentDao studentDao; // Autowires by type. Injects th…

linux系统查看当前安装字库,linux下怎样安装中文字体?

1、首先禁用xfs服务器。 运行Setup命令&#xff0c;在服务项中中止xfs随系统运行的特性。之所以禁用xfs服务器主要是因为xfs会自动更新字体目录下的fonts.dir文件&#xff0c;从而影响我们所做的修改。2、将选中的字体字库拷贝到相关的目录。 一般选用simsun.ttf为基本的字体(据…

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具&#xff0c;可以帮助我们熟悉Scala语言。即使你对Scala不熟悉&#xff0c;仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互&#xff0c;提交查询&#xff0c;这便于调试&#xff0c;也便于初学者使用…

linux vps 命令,CentOS最常用Linux vps操作命令整理大全

vps用的centos系统&#xff0c;为了方便查看整理了一些Linux常用命令&#xff1b;忘记的时候翻出来看看&#xff0c;不用二次浪费时间东找西找浪费时间&#xff1b;文件和目录:# cd /home 进入 ‘/home’ 目录# cd .. 返回上一级目录# cd ../.. 返回上两级目录# cd – 返回上次…

Java的20年:重大事件的时间表

翻译自: https://www.javacodegeeks.com/2015/12/2-decades-java-timeline-notable-events.html

w10系统自带linux系统,win10下,内置linux系统的安装和体验,你造吗?

原标题&#xff1a;win10下&#xff0c;内置linux系统的安装和体验&#xff0c;你造吗&#xff1f;众所周知&#xff0c;windows系统和linux系统一直是水火不容&#xff0c;而在最新的win10系统却完美兼容了linux系统&#xff0c;但是在默认情况下是关闭的&#xff0c;需要我们…

北风网09.接收普通消息2

该公众号暂时无法提供服务,请稍后再试 转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6273960.html

中科软测试面试题2019_2019国考成绩今日是否会发布,笔试120能进面不?

2019国考成绩要出来了不&#xff1f;2019国考成绩何时出来&#xff1f;现在已是1月中旬&#xff0c;许多考生对于自己的国考笔试成绩都非常期待&#xff0c;而最近风声四起&#xff0c;搞得考生们人心慌慌&#xff0c;那么2019国考成绩要出来了不&#xff1f;现在我们一起来分析…

C# 数据库连接测试以及备份

现在我们要做一个如图5.1的数据库连接配置&#xff0c;从界面上看有三个功能需要实现&#xff1a;从配置文件中读取数据库连接的相关属性、备份数据库、测试连接。 现在我们就一个一个开始讲解。 图5.1 1.从配置文件中读取数据库连接的相关属性 1) 配置文件中的数据库连接: &l…